#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. 정적 개체는 프로그램이 종료될 때 소멸되므로
프로그램이 끝나기 전에 정적 멤버의 소멸자가 호출되지 않습니다!