1

だから私はかなりの階層で取り組んでいるプロジェクトを持っています。この基本クラスには、すべての派生クラスで呼び出される関数 reset() があります。私が混乱しているのは、派生クラスのこのリセットは基本的にプライベート変数をリセットし、前の(上位)クラスの reset() 関数を呼び出すだけなので、リセット関数は仮想でなければならないのですか?

例えば。

class Base
{
private:
   int some;
public:
   void reset();
};

class Derive : public Base
{
private:
   int some1;
public:
   void reset();
};

class Derive_two : public Derive
{
private:
   int some2;
public:
   void reset();
};

したがって、基本的に Derive_two クラスのリセット関数は次のようになります。

void Derive_two::reset()
{
   some2 = 10;
   Derive::reset();
}

このコードは正しいですか?または、関数 reset() は virtual 型である必要がありますか?

どんな助けでも大歓迎です、ありがとう。

4

3 に答える 3

1

それはあなたの意図次第です。この機能は、仮想または非仮想として持つことができます。たとえば、次の関数を考えてみましょう

void f( Base &b )
{
    b.reset();
}

int main()
{
    Derive d1;
    f( d1 );
    Derive_two d2;
    f( d2 );
}

したがって、問題は、関数 f が基本サブオブジェクトのデータ メンバーのみをリセットするか、参照によって渡されたオブジェクトのデータ メンバーをリセットする必要があるかです。

于 2013-10-19T13:52:06.010 に答える
0

この同様の StackOverload の質問は、仮想メソッドを説明し、優れた例を提供します。

なぜ C++ で仮想関数が必要なのですか?

それがあなたの質問に答えない場合はお知らせください。

于 2013-10-19T13:51:43.730 に答える