この例を見てください。
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 のプライベート メンバーの値にアクセスできます。これはカプセル化の違反ではありませんか?
最初は、コンパイラがエラーをスローするだろうと思っていましたが、そうではありませんでした。