关于初始化列表,父类构造函数以及子类构造函数

问题描述:

    在stackoverflower上发现的一个问题,觉得挺有意思,自己之前也没有注意到,贴出来分享一下

https://stackoverflow.com/questions/15366621/are-parent-class-constructors-called-before-initializing-variables

 

这里面的内容实在讨论在子类的初始化列表中,如果对子类的成员变量进行初始化,然后调用父类的构造函数,那么他们的执行顺序会是什么样的,话不多说,码来!

#include<iostream>
using namespace std;

class parent {
	int a;
public:
	parent() :a(123) {
		cout << "parent constructor is called\n";
	}
};

class A {
public:
	A(int a) { cout << a<<"A constructor is called\n"; }
};

class son : parent
{
	A a1;
	A a2;
public:
	son() :a1(2),a2(3), parent()
	{
		cout << "son constructor is callede\n";
	}
};

int main() 
{
	
	son s;
	system("pause");
	return 0;
}

运行结果

parent constructor is called
2A constructor is called
3A constructor is called
son constructor is callede

 

分析:虽然按照常理,在初始化列表中,初始化的顺序是从左到右的,但是在加入了的构造函数之后,就会先去对父类初始化,这也符合我们的认知,因为在集成体系中的调用顺序就是这样的,如果我们在子类的构造函数中不显示的调用父类的构造函数,那么结果并不会发生变化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章