C++构造函数执行顺序
来源:互联网 发布:html5media.js 编辑:程序博客网 时间:2024/06/05 11:43
经测试按照如下顺序:
一、先执行静态成员的构造函数,如果静态成员只是在类定义中声明了,而没有实现,是不用构造的。必须初始化后才执行其构造函数。
二、任何虚拟继承基类的构造函数按照它们被继承的顺序构造(不是初始化列表中的顺序)
三、任何非虚拟继承基类的构造函数按照它们被继承的顺序构造(不是初始化列表中的顺序)
四、任何成员对象的构造函数按照它们声明的顺序构造
五、类自己的构造函数
测试程序如下:
[cpp] view plaincopy
- #include
<iostream> - #include
<string> - using
namespace std; -
- //抽象类A
- class
A - {
- public:
-
A() -
{ -
cout<<"抽象类A的构造函数"<<endl; -
} -
//纯虚函数fun -
virtual void fun1() = 0; - };
-
- //抽象类B
- class
B - {
- public:
-
B() -
{ -
cout<<"抽象类B的构造函数"<<endl; -
} -
//纯虚函数fun -
virtual void fun2() = 0; - };
-
- //普通类C
- class
C - {
- public:
-
C() -
{ -
cout<<"类C的构造函数"<<endl; -
} - };
-
- //普通类D
- class
D - {
- public:
-
D() -
{ -
cout<<"类D的构造函数"<<endl; -
} - };
-
- //普通类C
- class
E - {
- public:
-
E() -
{ -
cout<<"类E的构造函数"<<endl; -
} - };
-
- //普通类D
- class
F - {
- public:
-
F() -
{ -
cout<<"类F的构造函数"<<endl; -
} - };
-
- //普通类D
- class
G - {
- public:
-
G() -
{ -
cout<<"类G的构造函数"<<endl; -
} - };
-
- //普通类D
- class
H - {
- public:
-
H() -
{ -
cout<<"类H的构造函数"<<endl; -
} - };
- //普通类D
- class
M - {
- public:
-
M() -
{ -
cout<<"类M的构造函数"<<endl; -
} - };
-
- class
Test: publicA, publicB, virtualpublic C, virtualpublic D, publicE, publicF - {
- public:
-
Test():B(),A(),D(),C(),F(),E() -
{ -
cout<<"类Test的构造函数"<<endl; -
} -
void fun1() -
{ -
} -
void fun2() -
{ -
} - private:
-
G g; -
static H h; -
static M m; - };
-
- H
Test::h; -
- int
main( intargc, char*argv[]) - {
-
Test test; -
return EXIT_SUCCESS; - }
类C的构造函数 (虚拟继承基类)
类D的构造函数
抽象类A的构造函数 ( 非虚拟继承基类)
抽象类B的构造函数
类E的构造函数
类F的构造函数
类G的构造函数 (普通成员对象构造)
类Test的构造函数 (派生类自己构造函数)
阅读全文
0 0
- 构造函数执行顺序
- (原创)关于构造函数及参数执行顺序说明(c#)
- 构造函数的执行顺序
- 构造函数的执行顺序
- c++ 构造函数执行顺序
- C++构造函数执行顺序
- 继承构造函数执行顺序
- 构造函数的执行顺序
- 构造函数的执行顺序
- 构造函数的执行顺序
- C++构造函数执行顺序
- JAVA 继承 构造函数的执行顺序
- 演示继承的构造函数执行顺序
- java构造函数的执行顺序
- JAVA 继承 构造函数的执行顺序
- C++中构造函数的执行顺序
- 多重继承构造函数执行顺序
- 【java】构造函数的继承执行顺序
- linux查看及修改文件权限以及相关
- unity3d 简单动画
- spark-2.2.0安装和部署——Spark集群学习日记
- angular之表单验证ngMessages
- HTML页面3秒后自动跳转的三种常见方法
- C++构造函数执行顺序
- 4-4 特征选择和模型建立
- 细说Angular ng-class
- 【机器学习】决策树
- MySQL C语言接口-预处理语句
- centos7 编译php7
- SQL数据库日期查询格式
- 带阴影的TextView
- 经典SQL语句大全