В подклассе есть несколько объектов, (1) при построении объекта подкласса последовательность вызовов конструктора; (2) когда выполнение программы заканчивается, последовательность вызовов деструктора

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

Supongo que te gusta

Origin blog.csdn.net/weixin_46060711/article/details/123932542
Recomendado
Clasificación