C++クラスのコンストラクション関数とコンストラクション関数の呼び出し順序

1176 ワード

いくつかの筆記試験をしたり、面接でいくつかのクラスを定義したりして、クラスの構造関数と構造関数の呼び出し順序を書くように言われることがあります.この時、私たちはこれを理解してこそ、正しくすることができます.まず次のコードを見てみましょう.
#include <iostream>
using namespace std;

class A {
public:
    A() {
        cout << "A()" << endl;
    }
    ~A() {
        cout << "~A()" << endl;
    }
};

class B : public A {
public:
    B() {
        cout << "B()" << endl;
    }
    ~B() {
        cout << "~B()" << endl;
    }
};

class C : public B {
public:
    C() {
        cout << "C()" << endl;
    }
    ~C() {
        cout << "~C()" << endl;
    }
};

class D : public C {
public:
    D() {
        cout << "D()" << endl;
    }
    ~D() {
        cout << "~D()" << endl;
    }
};

int main()
{
    A a;
    B b;
    C c;
    D d;

    return 0;
}

次の実行結果を見てみると、呼び出し順序がどうなっているかがわかります.自分で実行してもいいか分からない場合は、その原理を把握すれば、他の変換に対して構造や構造関数の呼び出し順序の問題をすばやく書くことができます.構造関数の呼び出し順序が構造関数とは逆であることを覚えておいてください.
A() A() B() A() B() C() A() B() C() D() ~D() ~C() ~B() ~A() ~C() ~B() ~A() ~B() ~A() ~A()