継承におけるコンストラクターとデストラクターの呼び出しの順序
継承を使用したオブジェクト指向プログラミングでは、コンストラクターとデストラクターの呼び出しの順序を理解することが重要です。これは、複数の基本クラスとオブジェクト構成を扱う場合に特に重要になります。
次のクラス階層を考えてみましょう:
struct A { A() { cout << "A() C-tor" << endl; } ~A() { cout << "~A() D-tor" << endl; } }; struct B : public A { B() { cout << "B() C-tor" << endl; } ~B() { cout << "~B() D-tor" << endl; } A a; };
メイン関数内:
int main() { B b; }
こここの継承におけるコンストラクターとデストラクターの呼び出しの順序を管理するルールです。階層:
コンストラクター呼び出し:
デストラクター呼び出し:
デストラクター呼び出しの順序はコンストラクター呼び出し順序の逆:
デフォルトの初期化リスト:
明示的に定義された初期化リストがなくても、メンバー フィールドは派生クラスの前に初期化されます。コンストラクターが呼び出されます。この場合、 a は A のデフォルト コンストラクターに初期化されます。
したがって、main 関数のコードの期待される出力は次のようになります。
A() C-tor A() C-tor B() C-tor ~B() D-tor ~A() D-tor ~A() D-tor
以上がC の継承ではコンストラクターとデストラクターはどのように呼び出されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。