可能重复:
Class Data Encapsulation(private data) in operator overloading违反封装?
请看看下面这个例子。
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()函数,我能够访问OBJ2的私有成员的值时,我实际上名为add()在OBJ1的情况下。这不是违反封装吗?
起初我在想编译器会给我一个错误,但它没有。
如果你想让编译器抱怨,为什么不声明'add'来取代'const'引用呢? –