가능한 중복 :
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의 개인 멤버의 값에 액세스 할 수있게되었습니다. 이것은 캡슐화에 위배되지 않습니까?
처음에는 컴파일러에서 오류가 발생한다고 생각했지만 실제로는 그렇지 않았습니다.
컴파일러에서 불평을 원한다면 대신'const' 레퍼런스를 사용하기 위해'add'를 선언하지 않으시겠습니까? –