1

私はこのレイアウトを持っています

class Base {
   public:
   virtual void Initialize() { // base Implementation }
   Base() { Initialize(); }
};

class der_1 : public Base
{
    public:
    der_1() : Base() {}
    virtual void Initialize() { // der_1 Implementation }
};

class der_2 : public Base
{
    public:
    der_2() : Base() {}
    virtual void Initialize() { // der_2 Implementation }
};

これで、クラス der_1 または der_2 の新しいオブジェクトを作成するたびに、Initialize() の基本実装を呼び出すことになります。どうやら、オブジェクトの作成中に仮想関数を呼び出すことはできません。

今のところ、タイプ der_1 または der_2 のオブジェクトを作成した後に Initialize 関数を呼び出していますが、オブジェクトが作成されるたびに Initialize 関数呼び出しが結合されるため、これは正しい方法ではないようです。

誰かがより良い代替案を提案できますか?

4

1 に答える 1

0

コンストラクターの呼び出し中、オブジェクトはまだ基本クラスのインスタンスにすぎないため、オーバーロードされた Initialize() 関数を認識します。

この状況に対処するための提案がいくつかあります。

コンストラクターからの C++ 仮想関数

于 2013-03-04T12:54:02.977 に答える