之前在书上看到成员函数可以访问类的私有变量的时候觉得是废话嘛,如果成员函数都不能访问那私有变量不就变成了花瓶了。然而发现自己还是太naive。
这句话的意思是:在类的作用域内,包含成员函数、静态成员函数和友元函数内,可以访问类对象的私有变量。
特殊的,对于成员函数来讲,如果参数中有属于同一个类的其他对象,那么我们还可以访问其他对象的私有变量,而不仅仅是自己的。
可以这样理解,在类的作用域内部,没有所谓的权限控制,只有在外部才区分私有、保护和公有。
例如:
class A{int x = 1;
public:void test(A rhs);
};void A::test(A rhs) {cout << x + rhs.x << endl;
}int main() {ios::sync_with_stdio(false);A a, b;a.test(b);return 0;
}
上面代码中,a
的函数test
中访问了b
的私有变量x
,这是完全没有问题的。