引用中的复制构造可以使用私有成员变量

时间:2017-12-25 02:08:49

标签: c++

为什么在复制构造函数中我们可以使用rect.pmain()我们可以&#t; t?

class Rect
{
public:
    Rect()
    {
        p = new int(100);
    }
    Rect(const Rect& r)
    {
        width = r.width;
        height = r.height;
        p = new int(100);
        *p = *(r.p); // OK
    }
    ~Rect()
    {
        assert(p != NULL);
        delete p;
    }
private:
    int width;
    int height;
    int *p;
};
int main()
{
    Rect rect1;
    rect1.p = new int(200); // error
    Rect rect2(rect1);
    return 0;
}

3 个答案:

答案 0 :(得分:1)

因为班上的所有成员都是彼此的朋友。私有数据成员只能由类或朋友类的成员修改。

当您尝试访问rect.p中的main()时,您正试图从公共界面访问私人数据成员。

编辑:修正了措辞错误

答案 1 :(得分:1)

p 是您班级的私人成员,因此只有您班级的方法可以访问和/或修改它。

Make some research如果你想了解更多有关它的信息,请参阅getter和setter。

答案 2 :(得分:1)

这是关于课程访问权限的基本问题。

您在“私人”中定义的所有内容: 该类的所有成员,函数,朋友成员/函数都可以访问“私有”块中的内容。

您在“公共”中定义的所有内容: 在“私人”的另一边,每个人都可以访问“公共”区块中的内容。整数指针p在“私有”块中定义,因此构造函数可以使用它(因为构造函数是类的一部分)。但主要功能是“出类”。所以main函数无法访问指针p。

如果你想在主函数中获得点p,你可以定义一个公共函数“getPointer()”来返回指针p并在main函数中调用“getPointer()”。

回到你的代码。