C++ :继承下的构造函数和析构函数执行顺序

C++构造析构顺序 析构函数与构造函数的顺序 继承 先看看下面的代码 #include using namespace std; class A { public: A(){cout "Construct A" endl;} ~A(){cout "Destruct A" endl;} }; class C { public: C(){cout "Construct C" endl; 阅读详情

构造顺序

继承下,构造顺序前后顺序为:基类 , 内嵌子对象(成员类),派生类
其中,内嵌子对象,按照声明顺序,基类按照继承的先后顺序

析构顺序

与构造顺序相反

code

父类 子类
#include <iostream>

using namespace std;

class Base
{
public:
    Base()
    {
        cout<<"Base"<<endl;
    }
    ~Base()
    {
        cout<<"~Base"<<endl;
    }

};

class Drive : public Base
{
public:
    Drive()
    {
        cout<<"Drive"<<endl;
    }
    ~Drive()
    {
        cout<<"~Drive"<<endl;
    }

};


int main()
{
    Drive d;
    return 0;
}

运行结果:
Base
Drive
~Drive
~Base

父类 子类 派生类
#include <iostream>

using namespace std;

class Base
{
public:
    Base()
    {
        cout<<"Base"<<endl;
    }
    ~Base()
    {
        cout<<"~Base"<<endl;
    }

};

class Base1
{
public:
    Base1()
    {
        cout<<"Base1"<<endl;
    }
    ~Base1()
    {
        cout<<"~Base1"<<endl;
    }

};
class Drive : public Base
{
public:
    Drive()
    {
        cout<<"Drive"<<endl;
    }
    ~Drive()
    {
        cout<<"~Drive"<<endl;
    }
private:
    Base1 b1;
};


int main()
{
    Drive d;
    return 0;
}

运行结果:
Base
Base1
Drive
~Drive
~Base1
~Base

多继承
#include <iostream>

using namespace std;


class Base1
{
public:
    Base1()
    {
        cout<<"Base1"<<endl;
    }
    ~Base1()
    {
        cout<<"~Base1"<<endl;
    }

};

class Base2
{
public:
    Base2()
    {
        cout<<"Base2"<<endl;
    }
    ~Base2()
    {
        cout<<"~Base2"<<endl;
    }

};

class MBase1
{
public:
    MBase1()
    {
        cout<<"MBase1"<<endl;
    }
    ~MBase1()
    {
        cout<<"~MBase1"<<endl;
    }

};

class MBase2
{
public:
    MBase2()
    {
        cout<<"MBase2"<<endl;
    }
    ~MBase2()
    {
        cout<<"~MBase2"<<endl;
    }

};


class Drive : public MBase1, public MBase2
{
public:
    Drive()
    {
        cout<<"Drive"<<endl;
    }
    ~Drive()
    {
        cout<<"~Drive"<<endl;
    }
private:
    Base1 b1;
    Base2 b2;

};


int main()
{
    Drive d;
    return 0;
}

运行结果:
MBase1
MBase2
Base1
Base2
Drive
~Drive
~Base2
~Base1
~MBase2
~MBase1

告别裸机:在FreeRTOS上为STM32移植SOEM EtherCAT主站的思路与实战 本文详细介绍了在FreeRTOS环境下为STM32移植SOEM EtherCAT主站的工程实践。通过重构任务调度模型、优化内存管理和中断响应,成功将通信周期抖动控制在±100ns以内,满足工业控制系统的严苛实时性要求。文章包含完整的移植策略、性能优化方法和实测数据,为开发者提供了一套可靠的EtherCAT主站解决方案。 阅读详情

相关推荐

AI Agent在智能投研中的实战:多智能体信息整合与策略生成

那么,什么是AI Agent?简单来说,AI Agent是一种能够感知环境、做出决策并采取行动的自主系统。自主性:能够在没有人类直接干预的情况下运行,对自己的行为和内部状态有一定的控制权。反应性:能够感知环境的变化,并及时做出反应。主动性:不仅能够对环境变化做出反应,还能够主动地设定目标并采取行动实现这些目标。社会性:能够与其他Agent(包括人类和人工智能)进行交互、协作和竞争。它们可以全天候不间断地监控和处理海量信息,大大提升信息处理能力;

AI大模型应用之禅 189

c++继承中析构函数的调用顺序

在继承中的析构函数主要遵从一下四点规则: 1、首先调用派生类的析构函数(清理派生类的新增成员) 2、如果派生类中有子对象 , 则再调用派生类中子对象的析构函数 , 调用顺序是:在派生类中,先定义后调用。(清理派生类新增的成员对象) 3、再调用普通基类的析构函数(清理从基类继承来的新增成员) 4、最后调用虚基类的析构函数 #include using namespace std

zengchenacmer的专栏 4820

S32K144(14)ADC

1、简介 开发板S32K144+S32DS+JLINK,裸机版的程序编写 S32K14x包含两个12位ADC模块,ADC0和ADC1 应用程序可能需要ADC的连续采样(4K采样/秒),这可能对CPU有相当大的负载。虽然使用可编程延迟块(PDB)来触发ADC可能会减少一些CPU负载,但当ADC以非常高的速率采样或PDB被绕过时,ADC支持DMA请求功能以获得更高的性能。ADC可以在转换完成时触发DMA(通过DMA请求)。TRGMUX会根据不同的应用需求,使用软件为用户提供更灵活的DMA触发方案,例如,可

朗朗上口就行啦的博客 1万+

【C/C++】继承中构造函数与析构函数执行的顺序

构造函数执行顺序: 当派生类对象被创建时,首先会调用基类的构造函数,然后调用派生类自己的构造函数。 构造函数的调用顺序是按照继承的顺序,从基类依次往下调用。即先调用最上层的基类,再依次往下调用 定义子类对象,优先调用的是子类的构造函数,在子类的初始化参数列表初始化父类和子类的成员,先调用父类的构造函数初始化父类成员,再初始化子类成员(与内存布局顺序一致) 析构函数执行顺序: 析构函数的调用顺序与构造函数的调用顺序相反,先调用派生类自己的析构函数,再依次回溯调用基类的析构函数,直至最上层的基类的析构函数

努力让自己的能力配得上梦想. 2082

ubuntu恢复分区表——testdisk

testdisk恢复ubuntu分区表testdisk介绍安装testdisk使用testdisk恢复分区表 testdisk介绍 testdisk 具有广泛的功能,包括恢复丢失或损坏的分区和使不能启动磁盘可以重新启动,也经常被用来恢复被误删的文件。 安装testdisk 如果系统分区表被删除,需要使用ubuntu的启动盘,选择try ubnutu模式进入试用系统。 1、可以直接在终端安装testdisk: sudo apt-get install testdisk 通过命令直接打开testdisk: t

ZNestor的博客 6459

国土变更调查中六类拓扑错误的成因分析与高效修复实践

本文深入分析了国土变更调查中六类拓扑错误的成因,包括边界不一致和不规则图形等常见问题,并提出了高效的自动化修复实践。通过智能咬合算法、引力-斥力平衡模型等核心技术,显著提升了修复效率,节省人工质检时间70%。文章还分享了实战中的避坑指南和黄金法则,为相关从业人员提供了宝贵经验。

weixin_29202213的博客 359

C++析构函数调用顺序

C++析构函数调用顺序

m0_48170265的博客 3830

在国产麒麟系统上,用Postfix和Dovecot手搓一个内部邮件服务器(附Foxmail配置)

本文详细介绍了在国产麒麟系统上使用Postfix和Dovecot搭建内部邮件服务器的完整流程,包括系统准备、核心配置、安全加固及客户端适配。针对国产环境的特殊需求,提供了依赖包适配、配置差异和Foxmail客户端配置的实用解决方案,助力企业实现高效内部协作。

weixin_33722405的博客 371

【C++】类构造函数、析构函数的调用顺序「完整版」

一、全局变量、静态变量和局部变量 全局变量在程序开始时调用构造函数、在程序结束时调用析构函数。 静态变量在所在函数第一次被调用时调用构造函数、在程序结束时调用析构函数,只调用一次。 局部变量在所在的代码段被执行时调用构造函数,在离开其所在作用域(大括号括起来的区域)时调用析构函数。可以调用任意多次。 下面我们通过代码进行更详细的讲解: #include <iostream> using namespace std; // 下面定义三个类,在调用构造、析构函数时进行输出 class A {

qaqwqaqwq的博客 1万+

常用元器件使用方法3:电平转换芯片74LVC1T45的使用方法

介绍: 74LVC1T45是一个单位双向可控电平转换芯片。   芯片特性: 1、宽供给电压范围:1.65V到5.5V; 2、3.3V时,可输出24mA电流; 3、最大16uA电能损耗; 4、高噪音抑制;   型号:   引脚: VCC(A) 1 A端和DIR电源 GND 2 地 A 3 数据输入/输出 B 4 ...

snmplink的博客 1万+

网工、运维利器:MobaXterm,一款全能的远程工具

你好,这里是网络技术联盟站,我是瑞哥。是一款由Mobatek开发的多功能远程计算机管理工具,集成了多种网络协议和工具,专为网络工程师和系统管理员设计。它提供了丰富的远程连接功能,包括SSH、RDP、VNC、X11转发等,支持文件传输和多标签界面,内置了文本编辑器和多种网络工具,是一款全能的远程管理软件。MobaXterm的开发起始于2008年,最初只是一个简单的X服务器,但随着用户需求的不断增加和软件的逐步完善,MobaXterm逐渐发展成了一款功能全面、界面友好的远程管理工具。

网络技术联盟站 5230

C++继承中的构造函数和析构函数调用顺序

C++继承中的构造函数和析构函数调用顺序

A_easy_learner的博客 1203

RK3588开发笔记-Buildroot编译Qt5WebEngine-5.15.10

Rockchip RK3588是一款强大的多核处理器,广泛应用于边缘计算、人工智能、嵌入式系统等领域。为了在RK3588上运行自定义的Linux系统,并使用Qt5WebEngine进行Web内容渲染,Buildroot是一个非常合适的工具。本文将详细介绍如何使用Buildroot编译并配置Qt5WebEngine-5.15.10。Qt5WebEngine是Qt框架中的一个模块,它提供了一个功能强大的Web浏览器引擎,允许开发者在Qt应用程序中嵌入和显示现代网页内容。

flypig has a dream! 1158

关于继承中子类和父类中构造函数和析构函数运行的顺序,和继承的多态

构造函数:  父类的先执行,子类的后执行 析构函数: 父类的后执行,子类的先执行   T1.h  //父类 #ifndef k //防止头文件重复包含的问题 #define k #include using namespace std; class T1 { public: T1() { cout<<"T1's constructor is run

尘墨 1364

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

理解C++存在继承和组合的对象构造函数调用顺序

前言: Hello,全世界早上好啊,哈哈,9月你好,2015年9月的第一天,也是自己本科生涯的最后一年了,接下来就是校招走上自己的职场,昨天是大四的第一节课,上的是软件工程,挺喜欢的一门课,要好好体会一下其中的思想,哈哈,扯远了,往下的日子里,更要好好努力,今天以一道面试题为说起,理解或者说感受类中关于构造函数的调用顺序问题: Let’s show the code

小鱼的专栏 6530

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++继承派生中构造函数析构函数的执行顺序

新手必看!!!!C++继承派生中构造函数析构函数的执行顺序 1.按定义顺序构造各个基类 2.按定义顺序构造内嵌对象 3.构造派生类自身成员 class Base1 { public: Base1(int i) { cout<<"Constructing Base1: "<<i<<endl; } ~Base1() { cout<<"Deconstructing Base1"<<endl; } }; class Base2 { pu

weixin_46120888的博客 645

C++构造函数、析构函数顺序

1、输入以下程序,分析运行结果。#include <iostream> using namespace std; class B1 { public: B1(int i) { b1 = i; cout<<"构造函数 B1."<<b1<<endl; } void print() { cout<<b1<<endl; } private:

shuxingcq的博客 945

类的继承(三种继承方式)

我只是挑着我不太会的地方整理,可能比较基础。类的继承主要分为三类,公有继承,私有继承,保护继承。然后主要记录一下不同的继承方法对派生类的不同作用。1,派生类私有继承于基类。这个时候,派生类继承了基类的公有部分和保护部分,并且继承的这一些数据成员以私有部分存在于派生类中。基类的私有继承无法访问。2,派生类保护继承于基类。这个时候,派生类继承了基类的公有部分和保护部分,并且基类的公有部分和保护部分都以...

Let_life_stop的博客 1万+

继承(Inheritance)+复合(Composition)关系下的构造和析构

我们知道单一的继承或者复合关系的构造函数作用是从内到外,而析构是从外到内的。 那么同时拥有继承和复合关系的时候,构造函数与析构函数的作用顺序是怎么样呢,下面有事例代码来总结。 class Base { public: Base() { cout << "Base 的 构造函数" << endl; } ~Base() { cout << "Base 的 析构函数" << endl; } }; class Com.

hurryup的博客 407

CPP继承

如下示例,Person 类、Student 类、Teacher 类有大量重复的代码,造成代码冗余,降低开发效率。我们可以通过继承来解决这一问题。在面向对象的编程语言中,继承是一个核心概念。主要作用将重复的代码统一定义在父类中,子类从父类继承,同时继承也是实现多态的重要条件。继承就是一个新类从现有类派生的过程。新类称之为派生类或子类,原有的类称之为基类或父类;子类可以继承父类中的成员,从而可以提高代码的可重用性。继承关系下,子类和父类存在 is a 的 关系。

qq_59805046的博客 1121

c++中的构造函数&析构函数调用顺序

c++中的构造&析构函数调用顺序

cyz322649的博客 783

C++继承预习

一、C++类的3种继承方式,分别是public继承,protected继承,private继承。最常用的还是public继承。class默认的是private继承,它的member如果没写权限也是默认private。struct则相反,默认的是public继承。二、继承的构造函数与析构函数调用顺序1、构造函数:创建子类时先调用基类的构造函数然后再调用自己的构造函数2、析构函数:子类是调用自身的析构...

linuxwln的博客 231

继承和派生

#三种继承方式 共有继承 私有继承 保护继承 ##公有继承(public) 继承的访问控制 基类的public成员和protected成员:访问属性在派生类中保持怖不变; 基类的private成员:不可直接访问 访问权限 派生类中的成员函数:可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员; 通过派生类的对象:只能访问public成员。 ##私有继承(private) 继承的访问控制 基类的public和protected成员:都以private身份出现

Sermisry的博客 275

【无标题】

普通继承或虚函数继承,子类指针指向子类实例: 父类构造函数>>>子类构造函数 子类析构函数>>>父类析构函数 普通继承,父类指针指向子类实例: 父类构造函数>>>子类构造函数 父类析构函数 虚函数继承,父类指针指向子类实例: 父类构造函数>>>子类构造函数 子类析构函数>>>父类析构函数 由以上结果及测试情况得出以下结论: 无论如何继承,指针如何指向,构造函数都以最终实例化为准,顺序始终是先父类后子类 析构函数遵从类

cerry_world的博客 648

一篇文章带你了解C++面向对象编程--继承

基类的 Constructor 先执行,然后执行子类的 Constructor。派生类的 Destructor 先执行,然后执行基类的 Destructor。"Rectangular" 类继承于 “Shape” 类。"Circle" 类继承于 “Shape” 类。

raoxiaoz0425的博客 227

C++派生类构造函数

派生类构造函数的主干,它和以前介绍过的构造函数的形式相同,但是,它的总参数列表中包括基类构造函数所需的参数和派生类新增的成员变量初始化所需的参数。基类的构造函数是不能继承的,在声明派生类的时候,派生类并没有把基类的构造函数继承过来,因此,对继承过来的基类成员初始化的工作,也要由派生类的构造函数承担。其中,派生类的构造函数名是student_new(),在函数末尾,添加一个冒号“:”,然后, 跟着基类student的构造函数。其中,前2个参数赋给基类的构造函数,调用基类的构造函数。

LC的专栏 1300
上一篇: FFmepg--23-mp4文件合成3--main函数实现(C++实现)
下一篇: C++11: 智能指针(auto_ptr 、unique_ptr、shared_ptr、weak_ptr)使用技巧
八月的雨季997
博客等级 码龄8年 932粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

八月的雨季997

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

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

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

打赏作者

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

抵扣说明:

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

余额充值