기본 클래스와 파생 클래스가 있습니다. 공개 상속 자료를 파생시킵니다. 기본 클래스는 친구 함수 bool operator == (const Base & lhs, const Base & rhs) const를 구현했습니다. 파생 클래스를 구현 중입니다. 또한 bool 연산자 == (const Derive & lhs, const Derive & rhs) const를 구현해야합니다. 이제 내 문제는 부모 연산자 == 함수를 내 연산자 == 함수에서 호출하는 방법을 모른다는 것입니다. 기본 클래스에 대한 == 연산자는 기본에 속하지 않으므로 단순히 Base :: operator ==를 사용할 수 없습니다. 고맙습니다.C++ 부모의 친구 함수를 호출하는 방법?
3
A
답변
5
Base
하위 개체에 대한 참조를 바인딩하고 일반 연산자 구문과 비교하십시오. 예 :
class Base { /*...*/ };
bool operator==(const Base&, const Base&);
class Derive : public Base
{
friend bool operator==(const Derive&, const Derive&);
private:
int mem_;
};
bool operator==(const Derive& d1, const Derive& d2)
{
return static_cast<const Base&>(d1) == static_cast<const Base&>(d2)
&& d1.mem_ == d2.mem_;
}
경고 : 당신이 실수로 Derive
에 Base
을 비교할 경우이 같은 셋업이 자동으로 슬라이스한다. 기본 클래스가 비교 가능해야한다면 가상 비교 메커니즘을 설정하는 것이 좋습니다.
+0
고맙습니다. 이제 컴파일됩니다. – user875367
코드를 설명하는 대신 일부 (의사) 코드를 게시하면 질문이 훨씬 명확해질 수 있습니다. –
또한 무료'operator ==()'를 사용하면 "기본 클래스가이를 구현했습니다"라고하는 것이 의미가 없습니다. –