Mögliche Duplizieren:
Class Data Encapsulation(private data) in operator overloadingVerletzung der Kapselung?
Betrachten Sie bitte dieses Beispiel.
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;
}
In der add() Funktion, ich bin den Wert eines privaten Mitglied von obj2 zugreifen können, wenn ich tatsächlich add() im Rahmen der obj1 genannt habe. Ist das nicht eine Verletzung der Kapselung?
Zuerst dachte ich, dass der Compiler mir einen Fehler wirft, aber es tat es nicht.
Wenn Sie wollten, dass der Compiler sich beschweren würde, warum deklarieren Sie nicht 'add', um stattdessen eine' const'-Referenz zu verwenden? –