2011-08-31 52 views
3

有一個基類和一個派生類。派生公共繼承基礎。基類實現了一個友元函數bool operator ==(const Base & lhs,const Base & rhs)const; 我正在實現派生類,它也需要實現布爾運算符==(const Derive & lhs,const Derive & rhs)const;現在我的問題是,我不知道如何在我的operator ==函數中調用父母的operator ==函數。 Base類的operator ==不屬於base,所以我不能簡單地使用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_; 
} 

警告:像這樣的設置會悄悄切片如果不小心一個Base比作Derive。如果基類必須具有可比性,則可能需要設置虛擬比較機制。

+0

謝謝。它現在編譯。 – user875367