我正在尝试编译这样的代码:

#include <iostream>
using namespace std;

class CPosition
{
  private:
    int itsX,itsY;
  public:
    void Show();
    void Set(int,int);
};

void CPosition::Set(int a, int b)
{
  itsX=a;
  itsY=b;
}

void CPosition::Show()
{
    cout << "x:" << itsX << " y:" << itsY << endl;
}

class CCube
{
  friend class CPosition;
  private:
         CPosition Position;
};

main()
{
  CCube cube1;

  cube1.Position.Show();
  cube1.Position.Set(2,3);
  cube1.Position.Show();
}

但是在函数main()中3次无法访问“CCube::Position”。
我希望在CPube外部声明类CPosition,以便将来在新类中使用它,例如CBall :),但是如何在不使用继承的情况下使其起作用。是否有可能 :)?

问候,
PK

最佳答案

除了普通的getter,您还应该有一个const getter。
请注意返回的引用。这允许您对SetXX()的任何调用来影响CCube内部的Position拷贝,而不影响您一直在更新的拷贝。

class CCube
{
    private:
        CPosition Position;
    public:
        CPosition&       getPosition()       { return Position; }
        CPosition const& getPosition() const { return Position; }
};

08-24 18:10