ホームページ > バックエンド開発 > C++ > C の継承ではコンストラクターとデストラクターはどのように呼び出されますか?

C の継承ではコンストラクターとデストラクターはどのように呼び出されますか?

Patricia Arquette
リリース: 2024-11-29 04:10:09
オリジナル
296 人が閲覧しました

How are Constructors and Destructors Called in C   Inheritance?

継承におけるコンストラクターとデストラクターの呼び出しの順序

継承を使用したオブジェクト指向プログラミングでは、コンストラクターとデストラクターの呼び出しの順序を理解することが重要です。これは、複数の基本クラスとオブジェクト構成を扱う場合に特に重要になります。

次のクラス階層を考えてみましょう:

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;
}
ログイン後にコピー

こここの継承におけるコンストラクターとデストラクターの呼び出しの順序を管理するルールです。階層:

コンストラクター呼び出し:

  1. 基本クラスの構築: コンストラクター呼び出しは基本クラスから始まります。この場合、A のコンストラクターが最初に呼び出されます。
  2. メンバー フィールドの構築: 次に、メンバー フィールドが派生クラスで宣言された順序で構築されます。この場合、型 A の B のフィールド a が構築されます。
  3. 派生クラスの構築: 最後に、派生クラス B のコンストラクターが呼び出されます。

デストラクター呼び出し:

デストラクター呼び出しの順序はコンストラクター呼び出し順序の逆:

  1. 派生クラス デストラクター: 派生クラス B のデストラクターが最初に呼び出されます。
  2. メンバー フィールドデストラクター: 次に、メンバー フィールド a のデストラクターが呼び出され、そのインスタンスが破棄されます。 A.
  3. 基本クラス デストラクター: 最後に、基本クラス A のデストラクターが呼び出されます。

デフォルトの初期化リスト:

明示的に定義された初期化リストがなくても、メンバー フィールドは派生クラスの前に初期化されます。コンストラクターが呼び出されます。この場合、 a は A のデフォルト コンストラクターに初期化されます。

したがって、main 関数のコードの期待される出力は次のようになります。

A() C-tor
A() C-tor
B() C-tor
~B() D-tor
~A() D-tor
~A() D-tor
ログイン後にコピー

以上がC の継承ではコンストラクターとデストラクターはどのように呼び出されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート