this 스레드에 대한 응답에 따르면 비 구성원 함수로 operator=
을 오버로드 할 수 없습니다. 왜이과부하 연산자 = 비회원으로
class MyClass
{
// ...
};
MyClass& operator=(MyClass& Left, MyClass& Right)
{
// ...
}
입니다 : 그래서, 예를 들어, 다음은 매우 화가 컴파일러 무엇입니까? getter와 setter가있는 컨테이너 클래스가 있으므로 멤버 함수가 필요 없으며 캡슐화가 중단됩니다. 앞서 언급 한 스레드에 대한 답변 중 하나는 "L 값이 첫 번째 피연산자로 수신되었음을 확인하는 것"이라고 말했지만 그 의미를 완전히 이해하지 못했습니다. 누군가 명확히 해 주실 수 있습니까?
또한 operator=
, operator()
, operator[]
및 operator->
"이상한"경우 ...? 아니면 을 모두 구현해야합니까? 연산자를 멤버 함수로 오버로드 했습니까? (그렇지 않으면 완벽하게 합법적 인 것이지만 더 나은 방법을 찾고 있습니다.)
또한이 스레드를 참조하십시오 http://stackoverflow.com/questions/3938036/rationale-of-enforcing-some-operators-to-be-members – UmmaGumma
getter/setters는 할당 연산자보다 캡슐화를 중단한다고 생각합니다. 참고 : 클래스를 정의하지 않으면 클래스에 이미 할당 연산자가 있습니다. 시도 해봐. –
구성원 함수는 캡슐화를 중단하지 않습니다. 그들은 그것의 일부입니다. "비회원, 친구가 아닌 기능"을 만드는 환경 설정은보다 간단한 클래스가 될 수 있지만 일반적으로 operator =()를 구현하는 데 필요한 모든 것을 드러내면 operator =()를 멤버로 만드는 것보다 캡슐화가 약화 될 가능성이 큽니다. –