为什么在复制构造函数中我们可以使用rect.p
,main()
我们可以&#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;
}
答案 0 :(得分:1)
因为班上的所有成员都是彼此的朋友。私有数据成员只能由类或朋友类的成员修改。
当您尝试访问rect.p
中的main()
时,您正试图从公共界面访问私人数据成员。
编辑:修正了措辞错误
答案 1 :(得分:1)
p 是您班级的私人成员,因此只有您班级的方法可以访问和/或修改它。
Make some research如果你想了解更多有关它的信息,请参阅getter和setter。
答案 2 :(得分:1)
这是关于课程访问权限的基本问题。
您在“私人”中定义的所有内容: 该类的所有成员,函数,朋友成员/函数都可以访问“私有”块中的内容。
您在“公共”中定义的所有内容: 在“私人”的另一边,每个人都可以访问“公共”区块中的内容。整数指针p在“私有”块中定义,因此构造函数可以使用它(因为构造函数是类的一部分)。但主要功能是“出类”。所以main函数无法访问指针p。
如果你想在主函数中获得点p,你可以定义一个公共函数“getPointer()”来返回指针p并在main函数中调用“getPointer()”。
回到你的代码。