C++ Friend构造函数

Her*_*ron 10 c++

我有两个班级: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)


Rem*_*eau 6

我会这样做:

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)