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++親の友人機能を呼び出す方法は?
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 ==()'をお持ちの場合、 "基本クラスはそれを実装しました"とは意味がありません。 –