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

问题描述:

    在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 a2;
	A a1;
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
3A constructor is called
2A constructor is called
son constructor is callede

 

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巴塞罗那的风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值