2011-08-31 1 views
3

기본 클래스와 파생 클래스가 있습니다. 공개 상속 자료를 파생시킵니다. 기본 클래스는 친구 함수 bool operator == (const Base & lhs, const Base & rhs) const를 구현했습니다. 파생 클래스를 구현 중입니다. 또한 bool 연산자 == (const Derive & lhs, const Derive & rhs) const를 구현해야합니다. 이제 내 문제는 부모 연산자 == 함수를 내 연산자 == 함수에서 호출하는 방법을 모른다는 것입니다. 기본 클래스에 대한 == 연산자는 기본에 속하지 않으므로 단순히 Base :: operator ==를 사용할 수 없습니다. 고맙습니다.C++ 부모의 친구 함수를 호출하는 방법?

+2

코드를 설명하는 대신 일부 (의사) 코드를 게시하면 질문이 훨씬 명확해질 수 있습니다. –

+1

또한 무료'operator ==()'를 사용하면 "기본 클래스가이를 구현했습니다"라고하는 것이 의미가 없습니다. –

답변

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_; 
} 

경고 : 당신이 실수로 DeriveBase을 비교할 경우이 같은 셋업이 자동으로 슬라이스한다. 기본 클래스가 비교 가능해야한다면 가상 비교 메커니즘을 설정하는 것이 좋습니다.

+0

고맙습니다. 이제 컴파일됩니다. – user875367