我有两个班级:Point只住在Space
class Point
{
private:
Point(const Space &space, int x=0, int y=0, int z=0);
int x, y, z;
const Space & m_space;
};
Run Code Online (Sandbox Code Playgroud)
构造函数是故意私有的,我不希望它被直接调用.我想用这种方式创建点数
Space mySpace;
Point myPoint = mySpace.Point(5,7,3);
Run Code Online (Sandbox Code Playgroud)
有没有办法这样做?谢谢.
cdh*_*wie 11
是的,声明Space::Point()为朋友方法.该方法将获得对Point私人成员的访问权限.
class Point
{
public:
friend Point Space::Point(int, int, int);
private:
// ...
Run Code Online (Sandbox Code Playgroud)
我会这样做:
class Space
{
public:
class Point
{
private:
Point(const Space &space, int x=0, int y=0, int z=0);
int m_x, m_y, m_z;
const Space & m_space;
friend class Space;
};
Point MakePoint(int x=0, int y=0, int z=0);
};
Run Code Online (Sandbox Code Playgroud)
Space::Point::Point(const Space &space, int x, int y, int z)
: m_space(space), m_x(x), m_y(y), m_z(z)
{
}
Space::Point Space::MakePoint(int x, int y, int z)
{
return Point(*this, x, y, z);
}
Run Code Online (Sandbox Code Playgroud)
Space mySpace;
Space::Point myPoint = mySpace.MakePoint(5,7,3);
Run Code Online (Sandbox Code Playgroud)