#include <iostream>
using namespace std;
class M {
public:
M() {
cout << __FUNCTION__ << endl; }
~M() {
cout << __FUNCTION__ << endl; }
};
class N {
public:
N() {
cout << __FUNCTION__ << endl; }
~N() {
cout << __FUNCTION__ << endl; }
};
class A {
public:
A() {
cout << __FUNCTION__ << endl; }
~A() {
cout << __FUNCTION__ << endl; }
};
class B : public A {
public:
B() {
cout << __FUNCTION__ << endl; }
~B() {
cout << __FUNCTION__ << endl; }
private:
M m1;
M m2;
static N ms;
};
N B::ms;
int main(void) {
{
B b;
printf("\n\n*************\n\n");
B c;
printf("\n\n*************\n\n");
}
system("pause");
return 0;
}
出力は次のとおりです:
任意のキーを押した後:
1. サブクラス オブジェクトを作成するときのコンストラクターの呼び出し順序:
静的データ メンバーのコンストラクター -> 親クラスのコンストラクター -> 非静的データ メンバーのコンストラクター -> 独自のコンストラクター 注: オブジェクトがいくつ作成されても、クラスの静的メンバーは 1 回だけ構築されるため、静的メンバーのコンストラクターは 1 回だけ呼び出され
ます
。
2. サブクラスのデストラクタの呼び出し順序は、サブクラスのコンストラクタの呼び出し順序と逆です。!!
覚えておいてください、逆のことをしてください。
3. 静的オブジェクトはプログラムの終了時に破棄されるため、
プログラムの終了前に静的メンバーのデストラクターは呼び出されません。