使用私有修饰符,为什么可以直接访问其他对象中的成员
With a private modifier, why can the member in other objects be accessed directly?
我有以下代码:
class A
{
private:
int x;
public:
A()
{
x = 90;
}
A(A a1, A a2)
{
a1.x = 10;
a2.x = 20;
}
int getX()
{
return this->x;
}
};
我知道代码可能很奇怪,但我不明白为什么a1
和a2
可以访问私有数据成员x
?
问得好。关键是c++中的保护是类级别,而不是对象级别。因此,在一个对象上调用的方法可以访问同一类的任何其他实例的私有成员。
如果你认为保护的作用是允许封装,以确保类的作者可以构建一个内聚的类,而不必防止外部代码修改对象内容,那么这是有意义的。
关于真正的"为什么?"的另一个想法。考虑一下如何编写几乎所有的复制构造函数;您希望访问原始的底层数据结构,而不是它所呈现的接口。
类的任何成员函数以及构造函数都可以访问私有数据。即调用该方法的实例对象的私有成员或其他实例的私有成员。
在本例中,它是构造函数和它的其他实例(即a1, a2)。
简答: class A
的成员方法中(对象/指针和static
成员)class A
的所有成员都可以被访问
A(A a1, A a2)
{
a1.x = 10;
a2.x = 20;
}
现在从我的理解来看,你的问题是调用构造函数调用的对象如何能够访问其他类成员变量?
现在,构造函数和参数a1,a2
都是类作用域。它可以访问它的所有成员,而不管它的访问级别。这也可以在构造函数中使用-
this->x = a1.x; // Notice that "this" members can be accessed too.
// How ever both the member variables are different and are part of
// different objects.
相关文章:
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 为什么我可以访问其他班级的私人成员?
- 访问其他类中多个对象的私有成员向量
- 访问其他线程堆栈变量如何在C++中工作?
- 访问其他网站后如何获得完整(精确)的URL / QUrl地址?
- C++ 子类无法访问其他子类向量
- Windows 10 是否保护您不访问其他程序正在使用的内存?
- 不太明白 & 运算符的地址在这个结构中做什么,以及它如何能够访问其他成员变量
- 访问其他抽象类,而无需在C 中包含参考
- 当 lambda 函数必须访问其他成员时,如何将该函数分配给结构成员
- 如何在Qt中访问其他类的对象?
- 如何访问其他 .cc 文件中命名空间中定义的函数
- 在C 中,可以从第三个共享对象访问其他两个不同共享对象
- 访问其他类中的变量 (C++)
- 在C++中访问其他文件中的功能时遇到问题
- std::函数成员是否可以访问其他成员
- 如何访问其他类的成员枚举 (c++)
- 模板类的模板操作员需要访问其他专业
- 访问其他类函数C++中的类变量
- 安全地移动在访问其他成员的成员线程中运行 lambda 的对象