Duplicar posible:
Class Data Encapsulation(private data) in operator overloadingViolación de la encapsulación?
favor vistazo a este ejemplo.
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;
}
En la función add(), estoy en condiciones de acceder al valor de un miembro privado de obj2 cuando en realidad, he llamado add() en el contexto de obj1. ¿No es esto una violación de la encapsulación?
Al principio estaba pensando que el compilador me arrojaría un error, pero no fue así.
Si desea que el compilador se queje, ¿por qué no declarar 'add' para tomar una referencia' const' en su lugar? –