3

どのように実装すべきか

operator==(const Base& base)

サブクラスstを比較するには、次のように呼び出されたときに呼び出しが適切にディスパッチされます

Base* base1 = new Derived1();
Base* base2 = new Derived2();
base1->operator==(*base2)?
4

2 に答える 2

6
  1. operator== を独立した関数として実装します。
  2. 引数の 1 つで仮想メソッドを呼び出すようにします (IsEqual() など)。

それはあなたが持っているポイントにあなたを取得します

Derived1::IsEqual(const Base& base)

呼ばれた。ここから、いくつかのオプションがあります

  1. RTTI を使用して dynamic_cast<> ベースを Derived1 に
  2. 派生数が少なく有限である場合は、実装できます

    virtual bool Base::IsEqualToDerived(const Derived1& d) {return false};
    virtual bool Base::IsEqualToDerived(const Derived2& d) {return false};
    

仮想メソッドとして。Derived1 では、オーバーライドして実際に比較します。

于 2010-07-28T12:31:33.180 に答える
1

これは、operator ==に関する特定の質問ではなく、クラスと型に関する一般的なC++の質問のようです。私の知る限り、あなたが与えている特定の例では、dynamic_castを使用する以外に方法はありません。

于 2010-07-28T12:45:41.017 に答える