您的位置:首页 > 编程语言 > C语言/C++

C++类的构造顺序

2015-07-28 17:46 459 查看
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的构造函数

请按任意键继续. . .

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


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: