0

次の基本クラスを検討してください。

class Base
{
public:
    virtual ~Base(void);
    virtual void foo(void);
    virtual void bar(void) = 0;
}

ここで、特定のクラスが Base の最も派生したクラスであることを知っているとします。関数を仮想として宣言する必要がありますか? 最も派生したクラスは、Base でポリモーフィックに使用できます。

たとえば、またはを使用する必要がありますMostDerived1MostDerived2?

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

4

3 に答える 3