예를 들어 또 다른 이유는 클래스 정의 내부에 자유 함수를 정의하는 유일한 방법이기 때문에 friend
이어야합니다. 친구가 아닌 자유 기능을 원한다면 클래스 외부에서 정의해야합니다.
왜 클래스에서 정의 하시겠습니까? 때로는 모든 연산자를 함께 정의하는 것이 좋다 :
struct SomeClass {
// blah blah blah
SomeClass &operator+=(const SomeClass &rhs) {
// do something
}
friend SomeClass operator+(SomeClass lhs, const SomeClass &rhs) {
lhs += rhs;
return lhs;
}
// blah blah blah
// several pages later
};
가있을 수 있습니다 사용자 친화적 조금 이상 :이 클래스 정의에 관련된 멤버 함수를 정의 물론 가정
struct SomeClass {
// blah blah blah
SomeClass &operator+=(const SomeClass &rhs) {
// do something
}
// blah blah blah
// several pages later
};
SomeClass operator+(SomeClass lhs, const SomeClass &rhs) {
lhs += rhs;
return lhs;
}
오히려 거기에 선언하고 .cpp 파일로 정의하는 것입니다.
편집 : 실제로 생각하지 않고 + =와 +를 예로 사용했지만 과 같이 밀접한 관련 연산자가없는 operator<<
에 대한 질문입니다. 그러나 operator<<
이 인쇄와 관련된 하나 이상의 멤버 함수를 호출하면 정의 된 위치 근처에서 정의 할 수 있습니다.
정말 다른 이유가 필요합니까? –
@ mmyers : 나는 단지 내가 할 수있는만큼 명확하게 이해하려고 노력한다 .... – skydoor
분명히 멤버 함수가 될 수는 없지만 (Charles Bailey의 답 참조), 친구 일 필요는 없다. if 당신은 클래스의 퍼블릭 인터페이스의 관점에서 구현할 수 있습니다. – UncleBens