浅析C++类创建过程构造函数调用顺序

浅析C++类创建过程构造函数调用顺序

1:理论

C++若新建一个类,则类的初始化顺序是

(1)父类构造函数(按派生表的次序调用)

(2)成员变量初始化

(3)自身构造函数

2:代码验证
#include <iostream> 
using namespace std;

class A{
public:
	A(){
		cout<<"A的构造函数。"<<endl;
	}
	~A(){
		cout<<"A的析构函数。"<<endl;
	}
};

class B :public A{
public:
	B(){
		cout<<"B的构造函数。"<<endl;
	}
	~B(){
		cout<<"B的析构函数。"<<endl; 
	}
};

class C:public A,public B{
public:
	C(){
		cout<<"C的构造函数。"<<endl;
	}
	~C(){
		cout<<"C的析构函数。"<<endl;
	}
	A a;
private:
	B b;
};

int main()
{
	C c;
	return 0;
}

运行结果:

A的构造函数。//c的父类A的构造函数
A的构造函数。//c的父类B的父类A的构造函数
B的构造函数。//c的父类B的构造函数
A的构造函数。//c的成员变量a的构造函数
A的构造函数。//c的成员变量b的父类A构造函数
B的构造函数。//c的成员变量b构造函数
C的构造函数。//c自己的构造函数
C的析构函数。//析构函数的调用顺序和构造函数的相反
B的析构函数。
A的析构函数。
A的析构函数。
B的析构函数。
A的析构函数。
A的析构函数。

析构函数的调用顺序和构造函数的相反
其中,若C的父类B是虚继承的话,也就是如下

class C:public A,virtual public B

则优先调用B的构造函数

A的构造函数。//C的父类B的父类A的构造函数
B的构造函数。//C的父类B的构造函数
A的构造函数。//C的父类A的构造函数
A的构造函数。
A的构造函数。
B的构造函数。
C的构造函数。
C的析构函数。
B的析构函数。
A的析构函数。
A的析构函数。
A的析构函数。
B的析构函数。
A的析构函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值