C++类成员方法中能否访问同类其他对象的private私有成员?
#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; }
原因解释
- C的访问控制是类级别而非对象级别,这是C标准明确定义的规则。只要处于同一个类的作用域范围内,不管访问的是当前
this指向的对象成员,还是同类型其他实例的成员,都可以直接访问私有、保护成员,不受访问权限限制。 - 这个规则的设计逻辑非常合理:类的成员函数本身就是负责实现类的内部逻辑,很多常见场景都需要操作同类型其他实例的内部状态,比如拷贝构造函数、移动构造函数、赋值运算符重载、比较运算符重载等场景,如果按对象级别限制访问权限,这些功能根本无法正常实现,反而需要额外给所有私有成员加公有的读写接口,反而破坏了类的封装性。
举个最常见的使用场景示例:
// Test类的拷贝构造函数 Test::Test(const Test& other) { // 直接访问传入的other实例的私有成员x是合法的,和你示例中的逻辑完全一致 x = other.x; }
你给出的示例代码完全符合C++语法规则,编译运行后会正常输出0。
内容的提问来源于stack exchange,提问作者OneMoreGamble
相关产品推荐
相关产品推荐

