0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++之继承中构造和析构学习的总结

电子设计 来源:电子设计 作者:电子设计 2020-12-24 16:10 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在我们前面学习过类中的构造函数,以及析构函数,那么自然而然,在继承关系中,必然是存在着析构和构造着。

一、子类对象的构造

1、问题的引出

如何初始化父类成员?

父类构造函数和子类构造函数有什么关系?

2、子类中的构造函数怎样初始化父类成员:

子类中也是可以定义构造函数的:

--必须对继承而来的成员进行初始化,那么怎样初始化呢?这里有两种方式:

-直接通过初始化列表或者赋值的方式进行初始化

-调用父类构造函数进行初始化

3、父类构造函数在子类中的调用方式

默认调用

-适用于无参构造函数和使用默认参数的构造函数

显示调用

-通过初始化列表进行调用

-适用于所有父类构造函数

实践代码模板:

代码实践:

输出结果:

注解:通过上面的代码输出结果,我们可以发现,子类定义的对象如果没有没有传参,就隐式调用父类的构造函数;当然上面也使用了显示调用,通过初始列表的就可以看出。

4、构造规则

子类对象在创建时会首先调用父类的构造函数

先执行父类构造函数再执行子类的构造函数

父类构造函数可以被隐式调用或者显示调用

5、对象创建时构造函数的调用顺序

(1)调用父类的构造函数

(2)调用成员变量的构造函数

(3)调用类自身的构造函数

总结:先父母,后客人,再自己

代码实践:

输出结果:

注解:我们可以看到,先定义了一个Child对象,然后最先访问Object带参构造函数,然后再是Parent带参构造函数(说白了就是父类先触发),然后在子类Child中又包含了组合关系(也就是客人),然后Object类中的带参构造函数,最后再触发自身的带参构造函数。

二、子类对象的析构

1、析构函数的调用顺序与构造函数相反

(1)执行自身的析构函数

(2)执行成员变量的析构函数

(3)执行父类的析构函数

代码实践:

输出结果:

三、总结:

子类对象在创建时需要调用父类构造函数进行初始化

先执行父类构造函数然后执行成员的构造函数

父类构造函数显示调用需要在初始化列表中进行

子类对象在销毁时需要调用父类析构函数进行清理

析构顺序与构造顺序对称相反

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 可编程逻辑
    +关注

    关注

    7

    文章

    526

    浏览量

    45307
  • C++
    C++
    +关注

    关注

    22

    文章

    2122

    浏览量

    76713
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C/C++条件编译

    条件编译是一种在编译时根据条件选择性地包含或排除部分代码的处理方法。在 C/C++ ,条件编译使用预处理指令 #ifdef、#endif、#else 和 #elif 来实现。常用的条件编译指令有
    发表于 12-05 06:21

    C++程序异常的处理机制

    1、什么是异常处理? 有经验的朋友应该知道,在正常的CC++编程过程难免会碰到程序不按照原本设计运行的情况。 最常见的有除法分母为零,数组越界,内存分配失效、打开相应文件失败等等。 一个程序
    发表于 12-02 07:12

    C/C++代码静态测试工具Perforce QAC 2025.3的新特性

     Perforce Validate  QAC 项目的相对/根路径的支持。C++ 分析也得到了增强,增加了用于检测 C++ 并发问题的新检查,并改进了实体名称和实
    的头像 发表于 10-13 18:11 345次阅读
    <b class='flag-5'>C</b>/<b class='flag-5'>C++</b>代码静态测试工具Perforce QAC 2025.3的新特性

    强实时运动控制内核MotionRT750(六):us级高速交互C++,为智能装备提速

    Windows下运动控制实时内核MotionRT750的高速交互C++
    的头像 发表于 09-04 14:50 486次阅读
    强实时运动控制内核MotionRT750(六):us级高速交互<b class='flag-5'>之</b><b class='flag-5'>C++</b>,为智能装备提速

    多次运行AIBase函数出现意外掉线的情况,怎么解决?

    第一次运行无异常,但是第二次运行这里会意外掉线,try+catch同样无法捕捉,大家如何yolo的? 目前解决办法就是注释掉这段代码,不释放是否会出现问题,虽然暂时没发现异常
    发表于 08-14 07:10

    技能+1!如何在树莓派上使用C++控制GPIO?

    和PiGPIO等库,C++可用于编程控制树莓派的GPIO引脚。它提供了更好的性能和控制能力,非常适合对速度和精度要求较高的硬件项目。在树莓派社区,关于“Python
    的头像 发表于 08-06 15:33 3573次阅读
    技能+1!如何在树莓派上使用<b class='flag-5'>C++</b>控制GPIO?

    在OpenVINO™ C++代码启用 AddressSanitizer 时的内存泄漏怎么解决?

    在 OpenVINO™ C++代码启用 AddressSanitizer 时遇到内存泄漏: \"#0 0xaaaab8558370 in operator new(unsigned
    发表于 06-23 07:16

    主流的 MCU 开发语言为什么是 C 而不是 C++

    在单片机的地界儿里,C语言稳坐中军帐,C++想分杯羹?难喽。咱电子工程师天天跟那针尖大的内存空间较劲,C++那些花里胡哨的玩意儿,在这儿真玩不转。先说内存这道坎儿。您当stm32f4的256kRAM
    的头像 发表于 05-21 10:33 778次阅读
    主流的 MCU 开发语言为什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    C++学到什么程度可以找工作?

    C++开发的工作不仅需要深厚的编程功底,还要具备解决实际问题的能力,以及良好的沟通能力和团队协作精神。此外,持续学习和更新自己的知识体系也是保持竞争力的关键。
    发表于 03-13 10:19

    创建了用于OpenVINO™推理的自定义C++和Python代码,从C++代码获得的结果与Python代码不同是为什么?

    创建了用于OpenVINO™推理的自定义 C++ 和 Python* 代码。 在两个推理过程中使用相同的图像和模型。 从 C++ 代码获得的结果与 Python* 代码不同。
    发表于 03-06 06:22

    基于OpenHarmony标准系统的C++公共基础类库案例:ThreadPoll

    1、程序简介该程序是基于OpenHarmony标准系统的C++公共基础类库的线程池处理:ThreadPoll。本案例完成如下工作:创建1个线程池,设置该线程池内部有1024个线程空间。启动5个线程
    的头像 发表于 02-10 18:09 600次阅读
    基于OpenHarmony标准系统的<b class='flag-5'>C++</b>公共基础类库案例:ThreadPoll

    Spire.XLS for C++组件说明

    Spire.XLS for C++ 是一款专业的 C++ Excel 组件,可以用在各种 C++ 框架和应用程序。Spire.XLS for C+
    的头像 发表于 01-14 09:40 1297次阅读
    Spire.XLS for <b class='flag-5'>C++</b>组件说明

    EE-112:模拟C++的类实现

    电子发烧友网站提供《EE-112:模拟C++的类实现.pdf》资料免费下载
    发表于 01-03 15:15 0次下载
    EE-112:模拟<b class='flag-5'>C++</b><b class='flag-5'>中</b>的类实现

    AKI跨语言调用库神助攻C/C++代码迁移至HarmonyOS NEXT

    ,真正做到所“键”即所得。 这一创新框架的出现,正是为了解决开发者在迁移C/C++项目到HarmonyOS NEXT时面临的核心痛点。传统的NAPI接口调用复杂,学习成本高,开发者需要耗费大量精力进行适配
    发表于 01-02 17:08

    运动控制卡周期上报实时数据IO状态C++

    使用C++进行运动控制卡的周期上报功能实现
    的头像 发表于 12-17 13:59 1528次阅读
    运动控制卡周期上报实时数据IO状态<b class='flag-5'>之</b><b class='flag-5'>C++</b>篇