C++构造函数的调用顺序

文章目录


构造函数的工作过程:

1、派生类的构造函数在执行函数体之前调用基类的构造函数初始化基类;
2、在执行函数体之前根据声明次序初始化自己的成员;
3、执行自身函数体。

程序示例:

#include<iostream>
using namespace std;
class AA{
public:
	AA(){ cout<<"A"; }
	~AA(){ cout< < "a"; }
	};
class BB: public AA{
	AA aa;
public:
	BB(){ cout<<"B"; }
	~BB(){ cout< <"b"; }}
	;
int main(){
	BB bb;
	return 0;
}

在这里插入图片描述

【解析】
首先,构造函数的工作过程:1、派生类的构造函数在执行函数体之前调用基类的构造函数初始化基类;2、在执行函数体之前根据声明次序初始化自己的成员;3、执行自身函数体。所以程序中在创建BB对象时,首先调用AA的构造函数,输出“A”,然后初始化类BB中的成员a,调用AA的构造函数,输出“A”,最后执行函数体,输出“B”﹔

程序执行结束时,系统会自动调用类的析构函数,析构函数工作过程: 1、执行析构函数的函数体; 2、如果该类中拥有类对象成员,且类对象有析构函数,则以类对象成员声明次序的相反顶序调用其析构函数,销毁类对象成员;3、按原来构造顺序的相反顺序向上依次调用基类的析构函数。

所以程序运行结束时,首先调用BB的析构函数并执行函数体,输出‘“b”﹔然后调用a的析构函数,销毁a成员,输出“a”﹔最后调用基类AA的析构函数,输出“a”;综上所述,程序运行的输出是:“AABbaa”;答案为B。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值