#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. При создании объекта подкласса порядок вызова конструктора:
конструктор статического элемента данных -> конструктор родительского класса -> конструктор нестатического элемента данных -> его собственный конструктор Примечание: независимо от того, сколько объектов создается, статический элемент класса создается только один раз, поэтому конструктор статического элемента вызывается только один
раз
!!!
2. Порядок вызова деструктора подкласса противоположен порядку вызова конструктора подкласса! ! !
Помните, делайте наоборот.
3. Статический объект уничтожается при завершении программы, поэтому:
деструктор статического члена не будет вызываться до конца программы!