参考的复制构造可以使用私有成员变量

Copy-construct from reference can use private member variables

本文关键字:成员 变量 可以使 复制 参考      更新时间:2023-10-16

为什么在复制构造函数中我们可以使用 rect.p,在 main()中我们不能?

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

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

如果您想进一步了解,请对Getters和Setter进行一些研究。

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

尝试在main()中访问rect.p时,您正在尝试从公共接口访问私人数据成员。

编辑:修复了措辞错误

这是关于访问类的基本问题。

您在"私人"中定义的所有内容:班级的所有成员,功能,朋友,朋友/功能都可以访问"私人"块中的内容。

您在"公共"中定义的所有内容:在"私人"的另一侧,每个人都可以访问"公共"块中的东西。整数指针P在"私有"块中定义,因此可以由构造函数使用(因为构造函数是类的一部分)。但是主要功能是"淘汰"类。因此,主要功能无法访问指针p。

如果要在主要功能中获取点P,则可以定义一个公共函数" getPointer()"以返回指针p并调用" getPointer()"在MAIM函数中。

回到您的代码。