次のクラス階層があります。
class Base{
....
virtual bool equal(Base *);
}
class Derived1: public Base{
....
virtual bool equal(Base *);
}
class Derived2: public Derived1{
}
class Derived3: public Derived1{
}
class Derived4: public Base{
}
Derived4 と同様のクラスを比較する Base::equal(Base *) 関数をどのように記述すればよいですか? これらにはデータ フィールドがないため、実際のオブジェクトが同じ派生クラスであることのみを確認してください。
Derived1::equal(Base) の書き方 - Derived2 と Derived3 は類似しており、データ フィールドがなく、Derived1 のデータ フィールドで比較し、オブジェクトが同じ派生クラスからのものであることを確認する必要があります。
更新:次のような各派生クラスに同一の関数を記述したくないため、これが必要です。
bool Derived::equal(Base *b){
Derived *d = dynamic_cast<Derived*>(b);
return d;
}