2011-08-31 13 views
3

BaseクラスとDeriveクラスがあります。 publicを継承します。基本クラスはfriend関数bool operator ==(const Base & lhs、const Base & rhs)constを実装しています。 私は、bool operator ==(const Derive & lhs、const Derive & rhs)constを実装する必要のあるDeriveクラスを実装しています。今私の問題は、私の演算子==関数で親の演算子==関数を呼び出す方法を知らないということです。 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_; 
} 

警告:誤ってDeriveBaseを比較する場合、このようなセットアップは黙ってスライスします。基本クラスが同等でなければならない場合は、仮想比較メカニズムを設定する価値があります。

+0

ありがとうございます。それは今コンパイルされます。 – user875367