-1

派生クラスのコンストラクターの呼び出しで基底クラスのコンストラクターがいつ呼び出されるかを知る必要があります。

Small example:

class Base1
{...}

class Base2
{...}

class Derived : Base1,Base2
{...}

int main (int argc, char** argv)
{
Derived Child;
}

コマンドDerived Child;でコンストラクターDerivedが呼び出されますが、Derivedクラスコンストラクターが実行される前に、すべての基本コンストラクター、つまり Base1 と Base2 のコンストラクターが実行されることを読みました。

Derivedクラスのコンストラクタがこのように見える場合、イベントの順序はどうなるのだろうと思っています

Derived::Derived (Parameters)
:                      //initialization list
Base2 (Parameters)
{...}

Base2コンストラクターの初期化リストで現在呼び出されているクラスのコンストラクターですか、それともDerived以前に呼び出されていますか。Derivedさらに、コンストラクターの呼び出しの開始時、またはクラス コンストラクターの初期化リストの開始時に呼び出されるすべての基底クラス コンストラクターDerivedです。

あいさつ

4

1 に答える 1

1

コンストラクターの呼び出し順序は、最初に基本クラス、次に派生クラスです。

現在の例では、コンストラクターの呼び出し順序は次のとおりです。 Basis1 Basis2 Derived

クラス定義を次のように変更すると

クラス派生: Basis2、Basis1

コンストラクター呼び出しの順序は次のようになります。 Basis2 Basis1 Derived

基本クラスのコンストラクターは、初期化リストから明示的に呼び出されるかどうかにかかわらず、常に派生クラスの前に呼び出されます。

于 2013-11-26T11:05:54.387 に答える