可能性の重複:
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;
}
、私はOBJ1の文脈で)私は実際にアドオン(と呼ばれてきたobj2ののプライベートメンバの値にアクセスすることができています。これはカプセル化の違反ではありませんか?
私は最初にコンパイラが私にエラーを投げると思っていましたが、それはしませんでした。
コンパイラが文句を言いたいのであれば、代わりに 'add'を宣言して' const'参照をするのはなぜですか? –