Powiel możliwe:
Class Data Encapsulation(private data) in operator overloadingNaruszenie hermetyzacji?
Proszę spojrzeć na ten przykład.
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;
}
W funkcji add(), jestem w stanie uzyskać dostęp do wartości prywatnej członka obj2 kiedy już rzeczywiście nazywa add() w kontekście obj1. Czy to nie jest naruszenie enkapsulacji?
Początkowo myślałem, że kompilator rzuci mi błąd, ale tak się nie stało.
Jeśli chciałbyś, aby kompilator narzekał, dlaczego nie zadeklarować 'add', aby zamiast tego użyć referencji' const'? –