与复制构造函数和私有成员混淆
Confusion with copy constructor and private member
假设我有以下类:
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
仅限制对单个实例的访问,则会使对象不可复制,因为正如您所指出的,复制构造函数将无法从原始实例读取数据。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 访问类成员而不复制此变量或互斥变量
- std::ofstream 作为类成员删除复制构造函数?
- 正在复制具有未初始化成员的结构
- 直接初始化不可复制、不可移动的成员,而不使用聚合初始化
- 具有 STL 向量类型成员的类的复制内存
- 是否可以将不可复制的成员用作使对象不可复制的替代方法?
- 将C++浮点数组成员直接封送到 C#,而无需复制
- 在临时将成员带出时省略复制/移动
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- 类成员,而不复制
- Gcc 使用 memcpy 作为隐式复制赋值运算符,而不是成员复制
- 将对象及其数据成员复制到另一个对象
- Const 类成员复制构造函数
- c++特殊成员复制构造函数
- 如何将基类的私有成员复制到派生类的复制构造函数中
- 与类的成员复制混淆
- 复制构造函数- c++按位复制与按成员复制
- 将结构的成员复制到另一个结构