栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 中复杂子类构造函数和析构函数的执行顺序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 中复杂子类构造函数和析构函数的执行顺序

子类构造函数的执行顺序是:

静态成员对象的构造函数 -> 父类构造函数 -> 普通对象构造函数 ->子类构造函数
静态成员对象的构造函数只调用一次

子类析构函数的执行顺序(与构造函数相反):

子类析构函数 -> 普通成员对象析构函数 -> 父类析构函数 -> 静态成员对象析构函数
静态成员对象在程序结束的时候才会被销毁,所以静态成员对象的析构函数在程序结束的时候会调用

代码:

#include 

using namespace std;

class A {
public:
	A() {
		cout << __FUNCTION__ << endl;
		cout << "普通成员对象的构造函数3" << endl;
	}

	~A() {
		cout << __FUNCTION__ << endl;
		cout << "普通成员对象的析构函数2" << endl;
	}
};

class B {
public:
	B() {
		cout << __FUNCTION__ << endl;
		cout << "静态成员对象的构造函数1" << endl;
	}

	~B() {
		cout << __FUNCTION__ << endl;
		cout << "静态成员对象的析构函数4" << endl;
	}
};

class C {
public:
	C() {
		cout << __FUNCTION__ << endl;
		cout << "父类构造函数2" << endl;
	}

	~C() {
		cout << __FUNCTION__ << endl;
		cout << "父类的析构函数3" << endl;
	}
};

class D :public C {
public:
	D() {
		cout << __FUNCTION__ << endl;
		cout << "子类的构造函数4" << endl;
	}

	~D() {
		cout << __FUNCTION__ << endl;
		cout << "子类的析构函数1" << endl;
	}

private:
	static B b;  // 静态成员对象
	A a;  // 普通成员对象
};

B D::b;  // static类型初始化

int main() {
	D d1;
	D d2;  // 静态成员对象的构造函数只调用一次
	cout << "--------" << endl;
}

输入:输出:

父类构造函数2
A::A
普通成员对象的构造函数3
D::D
子类的构造函数4
C::C
父类构造函数2
A::A
普通成员对象的构造函数3
D::D
子类的构造函数4
--------
D::~D
子类的析构函数1
A::~A
普通成员对象的析构函数2
C::~C
父类的析构函数3
D::~D
子类的析构函数1
A::~A
普通成员对象的析构函数2
C::~C
父类的析构函数3
B::~B
静态成员对象的析构函数4
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/867102.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号