6
class Base {
    public:
    Base() {}

    void Foo(int x) {...}
};

class Derived : public Base {
    public:
    Derived(int args) {
        /* process args in some way */

        Foo(result);
    }
};

派生クラスのコンストラクターで基本クラスのメソッドを呼び出すことはできますか?Baseオブジェクトは完全に構築されているはずなので、これで問題ないと思いますが、念のため確認したいと思います。

4

2 に答える 2

12

派生クラスのコンストラクターで基本クラスのメソッドを呼び出すことはできますか?

はい。機能に気をつけてvirtualください。から派生したクラスが仮想関数をオーバーライドする場合、そのさらに派生したクラスのサブオブジェクトとしてDerived構築している間、動的型は常にであるため、さらに派生したクラスでオーバーライドされた仮想関数は呼び出されません。(デストラクタについても同じことが言えます、ところで。)DerivedDerived

Baseオブジェクトは完全に構築されているはずなので、これで問題ないと思いますが、念のため確認したいと思います。

あなたの推論は正しいです。

于 2010-06-19T10:47:02.087 に答える
2

次の場合に危険があり
ます。1。メソッドがオーバーライドされる
2.メソッドがオーバーライドされる他のメソッドを呼び出す

于 2010-06-19T10:47:32.230 に答える