在我们前面学习过类中的构造函数,以及析构函数,那么自然而然,在继承关系中,必然是存在着析构和构造着。
一、子类对象的构造
1、问题的引出
如何初始化父类成员?
父类构造函数和子类构造函数有什么关系?
2、子类中的构造函数怎样初始化父类成员:
子类中也是可以定义构造函数的:
--必须对继承而来的成员进行初始化,那么怎样初始化呢?这里有两种方式:
-直接通过初始化列表或者赋值的方式进行初始化
-调用父类构造函数进行初始化
3、父类构造函数在子类中的调用方式
默认调用
-适用于无参构造函数和使用默认参数的构造函数
显示调用
-通过初始化列表进行调用
-适用于所有父类构造函数
实践代码模板:
代码实践:
输出结果:
注解:通过上面的代码输出结果,我们可以发现,子类定义的对象如果没有没有传参,就隐式调用父类的构造函数;当然上面也使用了显示调用,通过初始列表的就可以看出。
4、构造规则
子类对象在创建时会首先调用父类的构造函数
先执行父类构造函数再执行子类的构造函数
父类构造函数可以被隐式调用或者显示调用
5、对象创建时构造函数的调用顺序
(1)调用父类的构造函数
(2)调用成员变量的构造函数
(3)调用类自身的构造函数
总结:先父母,后客人,再自己
代码实践:
输出结果:
注解:我们可以看到,先定义了一个Child对象,然后最先访问Object带参构造函数,然后再是Parent带参构造函数(说白了就是父类先触发),然后在子类Child中又包含了组合关系(也就是客人),然后Object类中的带参构造函数,最后再触发自身的带参构造函数。
二、子类对象的析构
1、析构函数的调用顺序与构造函数相反
(1)执行自身的析构函数
(2)执行成员变量的析构函数
(3)执行父类的析构函数
代码实践:
输出结果:
三、总结:
子类对象在创建时需要调用父类构造函数进行初始化
先执行父类构造函数然后执行成员的构造函数
父类构造函数显示调用需要在初始化列表中进行
子类对象在销毁时需要调用父类析构函数进行清理
析构顺序与构造顺序对称相反
审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
相关推荐
同样是函数,在 C 和 C++ 中有什么区别? 第一个返回值。 C语言的函数可以不写返回值类型,编译器会默认为返回 int。 但是 C++ 的函数,除了
发表于 11-29 10:25
•272次阅读
C语言中申请的堆内存能不能自动释放?每次都要手动 free 太麻烦,也容易忘记。 学过 C++ 的同学,应该首先能想到智能指针。 但是这是C语言,没有类和对象、构造
发表于 11-27 09:33
•108次阅读
同样是结构体,看看在C语言和C++中有什么区别?
发表于 10-30 15:11
•199次阅读
电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
发表于 10-30 09:45
•0次下载
ostream 是 C++ 标准库中一个非常重要的类,它位于 头文件中(实际上,更常见的是通过包含 头文件来间接包含 ,因为 包含了 和 )。 ostream 类及其派生类(如 std::cout
发表于 09-20 15:11
•663次阅读
1、程序简介该程序是基于OpenHarmony的C++公共基础类库的线程安全队列:SafeQueue。线程安全队列,是在dequeue的基础上封装std::lock_guard,以此实现线程的相关
发表于 08-30 12:41
•291次阅读
1、程序简介该程序是基于OpenHarmony的C++公共基础类库的线程安全队列:SafeQueue。线程安全队列,是在dequeue的基础上封装std::lock_guard,以此实现线程的相关
发表于 08-30 12:41
•320次阅读
电子发烧友网站提供《C++语言基础知识.pdf》资料免费下载
发表于 07-19 10:58
•7次下载
C++有多态与继承,但是很多人开始学习C++,有时候会面临一个常见问题,就是如何向下转型,特别是不知道具体类型的时候,这个时候就希望C++
发表于 07-18 10:16
•574次阅读
使用DevEco Studio创建一个Native C++应用。应用采用Native C++模板,实现使用NAPI调用C标准库的功能。使用C标准库hypot接口计算两个给定数平方和的平
发表于 04-14 11:43
•2594次阅读
在前两篇博客中,我们 向您介绍了新的 MISRA C++ 标准 和 C++ 的历史 。在这篇博客中,我们将仔细研究以 C++
发表于 03-28 13:53
•785次阅读
操作系统、嵌入式系统等对性能要求较高的场景。C语言的语法相对简单,学习曲线较平缓,也是学习其他高级语言的入门语言。 C++: C++是在
发表于 02-05 14:11
•2369次阅读
Microsoft开发的一种面向对象的事件驱动编程语言。它的设计目标是简化编程过程,让初学者也能快速上手。与之相比,C++语言是一种通用的、面向对象的编程语言,其设计目标是提供高性能的系统级编程。 语法: VB语言的语法较为简单,使用了很多可读性强的关键词,如“
发表于 02-01 10:20
•2258次阅读
的 MISRA C++:2023 博客系列的第二部分。
在这篇博客中,我们将深入探讨 C++ 的历史、编程语言多年来的发展历程以及它的下一步发展方向。
发表于 01-11 09:00
•581次阅读
在掌握了基于 TCP 的套接字通信流程之后,为了方便使用,提高编码效率,可以对通信操作进行封装,本着有浅入深的原则,先基于 C 语言进行面向过程的函数封装,然后再基于 C++ 进行面向对象的类封装。
发表于 12-26 10:00
•1814次阅读
评论