次の基本クラスを検討してください。
class Base
{
public:
virtual ~Base(void);
virtual void foo(void);
virtual void bar(void) = 0;
}
ここで、特定のクラスが Base の最も派生したクラスであることを知っているとします。関数を仮想として宣言する必要がありますか? 最も派生したクラスは、Base でポリモーフィックに使用できます。
たとえば、またはを使用する必要がありますMostDerived1
かMostDerived2
?
class MostDerived1 : public Base
{
public:
~MostDerived1(void);
void foo(void);
void bar(void);
}
class MostDerived2 : public Base
{
public:
virtual ~MostDerived2(void);
virtual void foo(void);
virtual void bar(void);
}
私が MostDerived1 に傾いているのは、それがプログラマーの意図を最も厳密にモデル化しているからです。MostDerived1 の別の子クラスが、MostDerived1 で多態的に使用されることは望ましくありません。
この推論は正しいですか?明らかな以外に、MostDerived2 を選択する正当な理由はありますthere could be a >0% chance MostDerived2 should be used polymorphically with any deriving classes (class OriginalAssumptionWrong : public MostDerived2)
か?
MostDerived1
/MostDerived2
は両方とも でポリモーフィックに使用できることに注意してくださいBase
。