派生类构造函数和析构函数详解

举报
努力变强的小C 发表于 2022/09/30 16:13:43 2022/09/30
【摘要】 派生类构造函数和析构函数详解

目录

派生类构造函数和析构函数的调用顺序

构造函数和析构函数调用顺序的例子

上面例子小结


从之前的内容我们了解了什么是C++的继承,为什么要学习继承,那么接下来我们就要了解一个全新的版块,通过下面这篇文章我们就会知道派生类构造函数和析构函数的调用顺序,以及一些知识基本的知识点

派生类构造函数和析构函数的调用顺序

在类中构造函数的主要作用就是对数据进行初始化,但是如果在派生类之中,如果对派生类中的新增加的成员如何进行初始化,就需要加入派生类中的构造函数,但是重要的一点是,基类的构造函数和析构函数是不能被它的派生类所继承的,所以说必须在派生类的构造函数中,也要对激烈的构造函数所需要的参数也同样进行设置,同时函数结束之后,照用的析构函数,对象进行收尾工作时,也需要加入新的析构函数来完成,这些所有问题都是我们接下来要讨论的,先由一个例子来讲述它们之间的关系

构造函数和析构函数调用顺序的例子

在一般情况下,当我们创建的派生类对象是首先就会调用基类的构造函数,其次我们就会调用派生类的构造函数,当我们删除或者说撤销类的对象时,就会首先调用派生类的析构函数,然后再次调用基类中的析构函数,这种顺序是相反的,下面我们就来举一个实际的例子来体现上面这两种情况

#include<iostream>
using namespace std;
class B {
public:
	B(){		//创建一个基本的构造函数
		cout << "B中的构造函数执行中……" << endl;
	}
	~B() {
		cout << "B中的析构函数执行中……" << endl;
	}
};
class A :public B {
public:
	A() {
		cout << "A中的构造函数执行中……" << endl;
	}
	~A() {
		cout << "A中的析构函数执行中……" << endl;
	}
};
int main() {
	A obj;
	return 0;
}

输出结果:

B中的构造函数执行中……
A中的构造函数执行中……
A中的析构函数执行中……
B中的析构函数执行中……

由上面的例子我们知道,函数是先执行了B中的构造函数在执行了A中的构造函数,在对象销毁是执行析构函数的顺序却是完全相反的,那么到底是什么导致了这种原因呢?

上面例子小结

 从上面的程序运行结果我们可以不难看出,当构造函数被调用时,会严格的按照先调用该基类中的构造函数,然后会调用派生类中的构造函数这个顺序来进行执行,其次析构函数的调用顺序,也就是对象生命周期结束时所调用的函数,而它的调用顺序与构造函数的调用顺序是完全相反的,它会先调用派生类中的析构函数,后来才会调用基类中的析构函数 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。