簡體   English   中英

C ++ Friend構造函數

[英]C++ Friend constructor

我有兩個類: 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;
};

構造函數是故意私有的,我不希望它被直接調用。 我想用這種方式創建點數

Space mySpace;
Point myPoint = mySpace.Point(5,7,3);

有沒有辦法這樣做? 謝謝。

是的,將Space::Point()聲明為友元方法。 該方法將獲得Point的私人成員的訪問權限。

class Point
{
public:
    friend Point Space::Point(int, int, int);
private:
    // ...

我會這樣做:

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);
};

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);
}

Space mySpace;
Space::Point myPoint = mySpace.MakePoint(5,7,3);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM