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

Unity Shader Graph 2D - Procedural程序化图形转动的环状六边形 Hexagon又称六边形,在游戏中是十分常见的基础形状,本文将使用程序化的六边形来制作多个环状六边形叠加的转动动画效果,实践Unity Shader Graph中的常用节点功能。 阅读详情

相关推荐

单片机通识之UART通信协议(如何用汇编实现)

使用汇编实现UART通信

smart_num_1的博客 997

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

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

zengchenacmer的专栏 4820

保姆级教程:STK 11.0 从下载到安装成功(附Matlab互联配置与常见问题解决)

本文提供STK 11.0的完整安装指南,包括下载、安装步骤、Matlab互联配置及常见问题解决方案。详细介绍了系统要求核查、分步安装流程、关键文件替换和许可证配置,确保用户能够顺利完成STK 11.0的部署并实现与Matlab的无缝对接。

weixin_30698297的博客 345

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

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

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

避开爬虫坑:手把手教你合法获取百度地图POI边界数据(以学校为例)

本文详细介绍了如何合规获取百度地图POI边界数据的方法论,特别以学校为例。通过解析POI数据结构、合法使用百度地图API接口、优化请求策略以及数据处理技巧,帮助开发者和研究者在遵守平台规则的前提下高效获取地理信息。适用于学术研究、商业分析等多种场景,确保数据采集的合法性与准确性。

weixin_28683065的博客 394

别再死磕官方文档了!用宿舍开黑的故事,5分钟搞懂Autosar CanNM网管报文

本文通过宿舍开黑游戏的生动类比,深入浅出地解析了Autosar CanNM网管报文的工作原理。从游戏队友协作到汽车ECU节点的同步机制,详细介绍了网管报文的唤醒流程、通信协议及休眠策略,帮助读者快速掌握这一关键技术。

weixin_30463341的博客 262

C++析构函数调用顺序

C++析构函数调用顺序

m0_48170265的博客 3830

新手小白入门编程第2讲 JAVA编程环境搭建 JDK与环境变量、Eclipse

1 JDK 1.1 JDK概述 JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。 JDK是整个java开发的核心,它包含了: JAVA开发工具(jdk\bin) 基础开发库(jdk\jre\lib\rt.jar) 基础开发库的源码(jdk\src.zip) 1.2 JDK下载与安装 本次使用的是JDK1.8,详细安装步骤可以参见”JDK培优安装手册”. 注意事项: 同时安装多个JDK时需要使用执行环境变量来确认使用的是哪个jdk 安装时选择默认选项安装到默认

程序媛泡泡的博客 4万+

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

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

qaqwqaqwq的博客 1万+

【Cesium开发实战】解决加载白膜数据位置不合适问题(地底或浮空)

解决白膜位置地底或者浮空问题。

莫言情怼的博客 569

城市仿真软件:AnyLogic_(8).行人与人群动态仿真

定义行人个体的行为和属性,如行走速度、目标位置等。// 创建一个行人// 设置行走速度为1.5 m/s// 设置目标位置为入口// 创建另一个行人// 设置行走速度为1.2 m/s// 设置目标位置为出口// 创建行人// 创建乘客行人与人群动态仿真在城市规划、交通管理和紧急疏散等领域具有广泛的应用。通过AnyLogic提供的行人模型模块,可以有效地模拟行人的个体行为、群体动态和与环境的交互。

kkchenjj的博客 1250

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

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

A_easy_learner的博客 1203

Qt Creator 下载和安装

在线安装程序是一个小型的安装程序,它将在您的计算机上下载和安装 Qt Creator。离线安装程序是一个较大的安装包,您可以将其保存在本地,并在没有网络连接的情况下安装 Qt Creator。在 Qt 官方网站上,您可以找到 Qt Creator 的下载页面。Qt Creator 是一款跨平台的集成开发环境(IDE),用于开发基于 Qt 框架的应用程序。在这一步中,您可以选择是否安装 Qt Creator 的附加组件。一旦您完成了组件的选择,安装程序将开始将 Qt Creator 安装到您的计算机上。

HackLogic的博客 6821

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

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

尘墨 1364

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

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

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

小鱼的专栏 6530

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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、付费专栏及课程。

余额充值