与复制构造函数和私有成员混淆

Confusion with copy constructor and private member

本文关键字:成员 复制 构造函数      更新时间:2023-10-16

假设我有以下类:

class Test
{
             int num;
     public:
             Test(int x):num(x){}
             Test(const Test &rhs):num(rhs.num+1){}
};
int main()
{
      Test test(10);
      Test copy = test;
}

副本中的num应该是11,我的问题是在副本构造函数内部,为什么我们可以使用num访问test的私有成员num来初始化副本中的num?让我困惑的是,如果你键入cout<<test.num<<endl,当然是错误的,因为你试图访问私有num,但如果你通过引用复制构造函数通过了测试,它就可以工作了,有人能告诉我这里发生了什么吗?

私有成员对类本身是私有的,而不是类的实例。

访问限制是按类的,而不是按对象的。

"private"的意思是--只能从同一个类中访问。

"protected"意味着--可以从同一类中访问,也可以从派生类中访问(在派生类中,受保护的非静态成员只能通过派生类类型的变量访问)。

"public"的意思是任何东西都可以访问。

访问限制的目的是限制必须检查的代码区域,以便了解值的使用位置,而不是阻止代码使用值。

private并不意味着对对象实例是私有的。这意味着是私有的。类CCD_ 10的实例可以访问其他实例CCD_ 11的私有成员。类似地,类T中的静态方法可以访问T实例的私有成员。

如果private仅限制对单个实例的访问,则会使对象不可复制,因为正如您所指出的,复制构造函数将无法从原始实例读取数据。