#include <iostream>
using namespace std;
class test{
private:
int a;
int b;
public:
test(int a = 1, int b = 2){
this->a = a;
this->b = b;
}
int re(test ccc){
a = ccc.a + 444;
b = ccc.b + 444;
}
};
Good question. The point is that protection in C++ is class level, not object level. So a method being invoked on one object can access private members of any other instance of the same class.
This makes sense if you see the role of protection being to allow encapsulation to ensure that the writer of a class can build a cohesive class, and not have to protect against external code modifying object contents.
Another thought as to the real "why?". Consider how you write almost any copy constructor; you want access to the original's underlying data structure, not its presented interface.
搜了下(关键字: c++ access class private variable),这里有不错的解释:
http://stackoverflow.com/questions/7396846/with-a-private-modifier-why-can-the-member-in-other-objects-be-accessed-directl
因为 C++ 中一个类是自己这个类的友元(friend class)。
因为 a,b 都是 test 类的成员。
一个类的方法可以访问自己的私有成员
同一类的不同对象间可以互相访问私有成员
一个类里当然可以
私有数据不能被直接访问,只能通过类的成员函数和友元函数调用。
友元函数 http://learn.jser.com/cplusplus/cpp-friend-functions.html