可能重复:
运算符重载中的类数据封装(私有数据)
请看这个例子。
class myClass {
int a;
public :
myClass () {
this->a = 0;
}
myClass(int val) {
this->a = val;
}
void add(myClass &obj2) {
cout << "Result = " << this->a + obj2.a;
obj2.a = 0;
}
void show() {
cout << "a = " << this->a;
}
};
int main() {
myClass obj1(10), obj2(20);
obj2.show(); //prints 20.
obj1.add(obj2);
obj2.show(); //prints 0.
return 0;
}
在 add() 函数中,当我在 obj1 的上下文中实际调用 add() 时,我能够访问 obj2 的私有成员的值。这不是违反封装吗?
起初我以为编译器会给我一个错误,但事实并非如此。