我们可以在 class 的方法中访问另一个对象的私有成员吗?
Can we access private members of another object within a method of a class?
#include <string>
#include <iostream>
#include <vector>
using namespace std;
class Test {
public:
int testing() {
Test t;
return t.x;
}
private:
int x = 0;
};
int main() {
Test a;
cout << a.testing() << endl;
}
我不知道我可以在 class定义了Test
。为什么允许我在示例代码中使用 t.x
?
通俗地说,C++ 的 private
是“class-private”而不是“object-private”。
作用域与源代码的词汇元素相关联,而不是与 运行 时间实体本身相关联。此外,编译后的代码对源代码中的逻辑实体几乎一无所知。出于这个原因,可访问性仅在词法范围级别上强制执行。在 class 的范围内,任何 class 类型的对象都可以访问其私有成员。
此外,C++ 将无法作为一个整体工作,否则。如果在每个对象的基础上检查可访问性,则无法编写复制构造函数或赋值运算符。这些操作需要访问源对象的成员才能 initialize/overwrite 目标对象。
#include <string>
#include <iostream>
#include <vector>
using namespace std;
class Test {
public:
int testing() {
Test t;
return t.x;
}
private:
int x = 0;
};
int main() {
Test a;
cout << a.testing() << endl;
}
我不知道我可以在 class定义了Test
。为什么允许我在示例代码中使用 t.x
?
通俗地说,C++ 的 private
是“class-private”而不是“object-private”。
作用域与源代码的词汇元素相关联,而不是与 运行 时间实体本身相关联。此外,编译后的代码对源代码中的逻辑实体几乎一无所知。出于这个原因,可访问性仅在词法范围级别上强制执行。在 class 的范围内,任何 class 类型的对象都可以访问其私有成员。
此外,C++ 将无法作为一个整体工作,否则。如果在每个对象的基础上检查可访问性,则无法编写复制构造函数或赋值运算符。这些操作需要访问源对象的成员才能 initialize/overwrite 目标对象。