는 "더 나은"응용 프로그램에 따라 다릅니다. 회원 버전은 Box
의 모든 개인 속성 및 메소드에 대한 액세스 권한을 부여하지만 Box
의 friend
으로 선언되지 않는 한 비회원 버전은 허용되지 않습니다. 그러나 비회원은 템플릿 화되어 다양한 유형에 적용될 수 있습니다.
구성원은 일반적으로 비회원보다 컴파일러에서 선호하지 않으며 그 반대도 마찬가지입니다. 대신 C++ overload resolution rules은 둘 중 하나를 선택하는 데 적용됩니다. Box&
멤버 함수 (*this
) 및 const Box& b
호출하기 위해 사용되는 오브젝트를 말한다 :
Box Box::operator+(const Box& b)
는 2 개 개의 인수를 취하는 것처럼 처리된다.
예에서 a
과 b
은 모두 const가 아닙니다.
Box Box::operator+(const Box& b)
을 호출하려면 b
을 const 참조로 변환해야합니다.
Box operator+(const Box& left, const Box& right)
을 호출하려면 a
과 b
을 모두 const 참조로 변환해야합니다.
회원 운영자가 더 적합하므로 (전환이 적음) 회원 운영자가 선택되었습니다.
operator+
이 const
으로 선언 되었다면 호출이 모호 해져서 컴파일러 오류가 발생했을 것입니다.
사용해보기. (채우기, 채우기) –
_ "두 가지 방법을 모두 정의 할 수 있습니다."_ 시도 할 때 어떤 일이 일어 났습니까? –
@RustyX : 어떻게 보이지 않습니다. –