C++类的构造顺序

C++类的构造顺序如下:
一、先执行静态成员的构造函数,如果静态成员只是在类定义中声明了,而没有实现,是不用构造的。必须始化后才执行其构造函数。
二、任何虚拟基类的构造函数按照它们被继承的顺序构造(不是初始化列表中的顺序)
三、任何抽象基类的构造函数按照它们被继承的顺序构造(不是初始化列表中的顺序)
四、任何非虚拟基类的构造函数按照它们被继承的顺序构造(不是初始化列表中的顺序)
五、任何成员对象的构造函数按照它们声明的顺序构造
六、类自己的构造函数

 

#include <iostream>
#include <string>
using namespace std;

//抽象类AbstractClass(含有纯虚函数的类)
class AbstractClass
{
public:
	AbstractClass()
	{
		cout<<"抽象类AbstractClass的构造函数"<<endl;
	}
	//纯虚函数fun
	virtual void vrFun() = 0;
};


//虚基类VirtualBase
class VirtualBase
{
public:
	VirtualBase()
	{
		cout<<"类VirtualBase的构造函数"<<endl;
	}
};


//普通类CommonClass
class CommonBaseClass
{
public:
	CommonBaseClass()
	{
		cout<<"类CommonBaseClass的构造函数"<<endl;
	}
};

class CommonMemberClass
{
public:
	CommonMemberClass()
	{
		cout<<"类CommonMemberClass的构造函数"<<endl;
	}
};


//普通类StaticMemberClass
class StaticMemberClass
{
public:
	StaticMemberClass()
	{
		cout<<"类StaticMemberClass的构造函数"<<endl;
	}
};

//普通类StaticMemberClass
class StaticMemberClassNotInitial
{
public:
	StaticMemberClassNotInitial()
	{
		cout<<"类StaticMemberClassNotInitial的构造函数"<<endl;
	}
};


class ClassLocal: virtual public VirtualBase, public AbstractClass,public CommonBaseClass
{
public:
	ClassLocal():VirtualBase(),AbstractClass(),CommonBaseClass()
	{
		cout<<"类ClassLocal的构造函数"<<endl;
	}
	void vrFun()
	{
	
	}
private:
	CommonMemberClass m_CommonMemberClass;
	static StaticMemberClass m_StaticMemberclass;
	static StaticMemberClassNotInitial m_StaticMemberClassNotInitial;
};

StaticMemberClass ClassLocal::m_StaticMemberclass;
int main(int argc, char* argv[])
{
	ClassLocal class_local;
	return EXIT_SUCCESS;
}


输出结果:
类StaticMemberClass的构造函数
类VirtualBase的构造函数
抽象类AbstractClass的构造函数
类CommonBaseClass的构造函数
类CommonMemberClass的构造函数
类ClassLocal的构造函数
请按任意键继续. . .


构造顺序步骤:静态成员--虚基类---抽象类---基类--成员变量--类自身的构造函数

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值