C++ | 构建子类,初始化父类(构造函数和析构函数的执行顺序)

c++ 子类构造函数初始化及父类构造初始化的使用 主要介绍了c++ 子类构造函数初始化及父类构造初始化的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 立即下载

构造函数顺序

假如有一个父类A(基类),一个的子类B,公有继承于A,当在测试文件(main函数)里,定义一个子类对象d,d对象的初始化会调用d的构造函数,但d对象的构造函数要想完成初始化必须先初始化父类的,因为子类B继承于A,A类的成员函数都被B继承过去了,所以完成初始化子类对象d必须先调用A(父类)的构造函数。

析构函数顺序

析构函数调用顺序其实和栈的原理类似,都是是先进后出原则,当创建子对象d时,会先执行父类构造函数,然后执行子类的构造函数。最后函数结束释放内存的时候,就会先执行子类的析构函数,然后才是父类的。

class Base1 {
public:

    Base1(){
        cout << "调用了Base的默认构造函数" << endl;
    }

    Base1(int b ,int d)  {
        cout << "调用了带两个参数的Base的构造函数" << endl;
    }

    Base1(int b)  {
        cout << "调用了带一个参数的Base的构造函数" << endl;
    }

    ~Base1() {
        cout << "调用了Base的析构函数" << endl;
    }
};

class Derived1 :public Base1{
public:

    Derived1()  {
        cout << "调用了Derived1的默认构造函数" << endl;
    }


    Derived1(int b, int d)  {
        cout << "调用了带两个参数的Derived1构造函数" << endl;
    };

    ~Derived1() {
        cout << "调用了Derived1的析构函数" << endl;

    }
};

    int main()

{

    Base1 b1;
    Base1 b2(10);
    Base1 b3(10,20);


    cout<<"==========="<<endl;

    Derived1 d1;

    Derived1 d2(1,2);


    cout<<"================="<<endl;

    return 0;
}

运行结果:
运行结果

总结:

构造子类时,先执行父类的构造函数,然后执行子类的构造函数。

析构子类时,先执行子类的析构函数,然后执行父类的析构函数。

葵花(Himawari)8/9卫星数据处理 李国春 葵花8(含葵花9,下同)是静止气象卫星,数据范围是星下点为140°E赤道上空的大圆盘。空间分辨率有500m、1km和2km三种。虽然其空间分辨率不高,但是有极高的时间分辨率,观测数据刷新仅10分钟。这对一些生态、农业和大范围自然灾害的动态检测具有非常高的应用价值。本文介绍如何使用RSD处理葵花8数据。 阅读详情

相关推荐

NHANES数据库实战:数据合并与加权分析技巧

本文详细解析了NHANES数据库实战中的核心技巧,重点阐述了数据合并与加权分析的正确方法。通过两个具体案例,手把手指导如何从数据下载、合并、权重计算到使用R语言survey包进行加权统计分析,避免因忽略复杂抽样设计而导致的研究偏倚,确保分析结果的准确性与可发表性。

weixin_29057065的博客 585

C++进阶剖析(十 九)之继承

1.1 继承是非常重要的,在面向对象编程中有着举足轻重的地位。尤其是在设计模式中。 1.1.1 生活中的继承 龙生龙,凤生凤,老鼠儿子会打洞。 生活中的继承是一种长相和行为的继承。 1.1.2 类之间的关系 组合关系(思想很重要) 一台电脑有CPU,主板,显示器等组成 继承关系(思想很重要) 电脑分为惠普,联想等(is a ) 1.1.3 1.2 类的组合关系 1.2.1代码实例 电...

海是倒过来的天的博客 1199

保姆级教程:用GEE(Google Earth Engine)复现CASA模型计算NPP,附完整数据集清单与Python代码

本文提供了一份详细的保姆级教程,指导如何使用GEE(Google Earth Engine)复现CASA模型计算NPP(净初级生产力)。教程涵盖环境准备、关键数据集获取与处理、Python代码实现全流程,以及结果验证与常见问题解决方案,帮助生态学研究者高效完成NPP计算。

weixin_28707365的博客 334

C++子类构造函数初始化及父类构造函数初始化

我们知道,构造方法是用来初始化类对象的。如果在类中没有显式地声明构造函数,那么编译器会自动创建一个默认的构造函数;并且这个默认的构造函数仅仅在没有显式地声明构造函数的情况下才会被创建创建。 构造函数与父类的其它成员(成员变量和成员方法)不同,它不能被子类继承。因此,在创建子类对象时,为了初始化从父类中继承来的成员变量,编译器需要调用其父类的构造函数。如果子类的构造函数没有显示地调用父类的构造函数,则默认调用父类的无参构造函数,至于什么是显式调用,下面会详细说明! 下面我们将从以下四种情况讲解c++子类构

qq295109601的博客 6477

SpringBoot项目实战:5分钟搞定豆包大模型API接入(附完整代码)

本文详细介绍了如何在SpringBoot项目中快速集成豆包大模型API,仅需5分钟即可完成。从环境准备、依赖配置到核心服务封装和控制器层实现,提供了完整的代码示例和实战技巧,帮助开发者高效接入大模型能力,提升智能客服等应用的开发效率。

weixin_30566063的博客 441

DSPACE仿真平台的使用

DSPACE仿真平台的使用 文章目录DSPACE仿真平台的使用1.ModelDesk新建项目2.MotionDesk引入项目3.ControlDesk引入项目4.项目整合运行 我们使用DSPACE仿真平台软件来模拟小汽车的自动驾驶。 总共需要用到DSPACE大类下的三个软件:ModelDesk、ControlDesk、MotionDesk。 1.ModelDesk新建项目 在桌面上点击ModelDesk图标,打开DSPACE—ModelDesk 选择 File 标签,侧边栏选择 New,点击 New A

qq_42582489的博客 7528

C++ 子类对象当父类对象使用

子类对象当父类对象使用1⃣️把子类对象直接赋值给父类对象(等号左边是父类对象,等号右边是子类对象) 子类对象赋值给父类对象,仅仅把继承自父类部分成员函数赋值给父类对象 赋值完成后等号左边依然是一个父类对象 Derived d; Base b; b=d;//把子类对象d当成父类对象来使用 (父类对象不能赋值给子类对象,也就是说父类对象不能当成子类对象使用) 2⃣️父类的引用指向子类

寻玉 5479

IPMI的SOL (Serial Over LAN) 和 UART

UART全名是Universal Asynchronous Receiver/Transmitter(通用異步接收/发送器),它是一个常用的異步串行传输协议。透过UART传输前,接收方须要先知道传输方的鲍率(Baud rate):单位时间内,讯号状态变化的次数。例如 115200 bps,表示每秒会传送115200个bits--> 因此读取率就是 1/115200=8.6微秒读取一次讯号。封包内的资料长度:通常是 8bits。

yeiris的博客 1万+

C++三大继承构造函数的执行顺序详解

一、单继承 核心:在构造子类之前一定要执行父类的一个构造函数。 1.构造函数(不包括复制构造函数)。         顺序:①直接父类;②自己               注意:若直接父类还有父类,那么“直接父类的父类”会在“直接父类” 之前 构造。 可以理解为这是一个递归的过程,知道出现一个没有父类的类才停止。     2.1 如果没有显式定义构造函数,则“合成的默认构

hsx5555621的博客 3736

【GameFramework框架内置模块】8、文件系统(File System)

最近好忙,鸽了好久。不能颓废了,继续发力。今天分享的是GF框架的文件系统。首先,引用比较官方的说法:GF的FileSystem虚拟文件系统,使用类似磁盘存储的感念对零散的文件进行集中管理,优化资源加载时产生的内存分配,也可以对资源进行局部片段加载,极大的提升了资源加载的性能。通俗点讲就是,我这个模块就是加载磁盘文件的,优化加载时产生的内存分配。那么,它是怎么优化的呢?

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2452

RK3568平台开发系列:Android环境下CAN的使用

在RK3568平台上,我们可以利用Android环境中的API来实现CAN的使用。通过以上步骤,我们可以在Android应用中发送和接收CAN数据,并进行相应的处理。当接收到CAN数据时,将触发onMessageReceived回调方法,我们可以在这个方法中对接收到的数据进行处理。在上述代码中,我们指定了CAN的ID为0x123,数据为{0x01, 0x02, 0x03},并设置了标志位和周期。接收CAN数据需要注册一个监听器,并在监听器中处理接收到的数据。发送CAN数据需要指定CAN的ID和数据。

2301_79330513的博客 1912

C++必看:C++构造函数的初始化顺序

本文总结了C++继承体系中构造函数和虚函数的调用规则:1)构造函数调用顺序为:虚基类→非虚基类(按声明顺序)→成员对象(按声明顺序)→派生类自身;2)构造函数中的虚函数调用静态绑定到当前类;3)拷贝构造函数在对象初始化而非赋值时调用;4)子类虚函数声明不影响父类静态绑定,仅对后续继承有效,多态性需从基类开始启用。文中通过代码示例演示了这些规则的具体表现,包括虚函数表切换时机和虚函数绑定机制。

Andytoe的博客 3021

Devexpress16.2.6破解工具

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

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

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

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

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

c++父类和子类

父类和子类的关系 子类继承父类的所有属性和行为; 子类可以定义自己的属性和行为; 父类和子类的继承 在类中,变量有三种属性,分别为public,protectd,private; 其区别如下: 变量属性 说明 public 可以被基类及其对象访问; protected private 父类和子类的构造和析构 父类和子类的转换 ...

limengjuhanxin的专栏 8557

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++中父类和子类的构造析构关系

核心原则:子类的任何构造函数(无论无参还是有参)执行时,必须先调用父类的某个构造函数;自动调用的条件:仅当父类存在默认构造函数(无参或全默认参数),且子类构造函数未在初始化列表中显式调用父类其他构造函数时,才会自动调用父类的默认构造;显式调用的必要性:若父类不存在默认构造函数,子类的任何构造函数(无参或有参)都必须在初始化列表中显式调用父类的带参构造函数,否则编译报错;灵活性:子类的有参构造函数可以通过初始化列表,将自身参数传递给父类的构造函数,实现父子类参数的联动。子类无法绕过父类的构造函数。

weixin_66709931的博客 920

java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题

package job; public class TestConsSeq { public static void main(String[] args) { /* * 几大原则 * 一、静态成员变量(Static) * 1、静态成员变量为类变量,所有对象共享同一内存空间 * 2、静态成员变量的声明和定义仅在首次加载类时执行一次 *

shijinupc的专栏 9257

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

通常情况下: 当创建派生类对象时: 基类的构造函数——>派生类的构造函数; 当撤消派生类对象时: 派生类的析构函数——>基类的析构函数。 1.派生类的构造函数和析构函数的调用顺序 (1) 输出的是:基类的构造函数 基类的构造函数 派生类的构造函数 输出...

weixin_40535588的博客 3486

C++类构造函数初始化列表执行顺序

C++类构造函数初始化列表执行顺序

嬴政 1万+

C++类构造函数初始化列表与子类向父类传参数

一、C++类构造函数初始化列表 class CExample { public: int a; float b; //构造函数初始化列表 CExample() : a(0), b(8.8) {} //构造函数内部赋值 CExample() { a = 0; b = 8.8; } }; 上面的例子中两个构造函数的结果是一样的。上面的构造函数(使用初始化列表的构造函数)显式的初始化类的成员;而没使用初始化列表的构造函数是对类的成员赋值,并没有进行显式的初始化。 初始化和赋值对内置

sinat_31608641的博客 5553

关于初始化列表,父类构造函数以及子类构造函数

关于初始化列表中的初始化顺序以及初始化父类构造函数

巴塞罗那的风的专栏 975

C++中构造函数与析构函数执行顺序

C++中,当定义一个类的对象时,系统会自动的调用该类的构造函数来为对象开辟内存空间和进行初始化工作。 构造函数执行顺序: 1,先执行父类的构造函数,对父类的数据成员进行初始化。如果父类还有父类,则一直向上寻找,直到最初的基类;如果有多个父类,则构造函数执行的顺序是声明父类时的顺序,而不是初始化列表中的顺序。 2,再执行内嵌对象成员的构造函数,对对象成员进行初始化。对象成员的执行顺序是是在类中

秋天里牵手的专栏 1293

派生类构造函数和析构函数的执行顺序

派生类构造函数和析构函数的执行顺序 链接: link. #include <iostream> using namespace std; class Contained1 { public: Contained1() { cout << "Contained1 ctor\n"; }//构造constructor ~Contained1() {cout << "Contained1 dtor\n";}//析构destructor }; class Conta

yalipf的博客 2440

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

C++继承 构造函数和析构函数的执行顺序 构造函数、析构函数的定义 构造函数: 对象在创建之后要做的一系列初始化工作。 析构函数: 对象在摧毁之前要做的一系列清理工作。 对象创建时构造函数的调用顺序 1.调用父类的构造函数 2.调用自己的构造函数 构造时先父类后自己 析构函数的调用顺序 1.调用自己的析构函数 2.调用父类的析构函数 析构时先自己后父类 例子 #include "stdafx.h" #include <iostream> #include <Windows.h> u

更多资料私我 569

C++:继承中的构造函数和析构函数

C++:继承中的构造函数和析构函数 1、继承中构造函数和析构函数调用顺序 a、调用父类构造函数; b、调用其他成员的构造函数; c、调用子类构造函数; d、析构调用顺序相反。 #include <iostream> using namespace std; class Base { public: Base() { cout<<"Base中的默认构造函数调用"<<endl; } ~Base() { cout<<"Base中的析

青瓦松 2184

子类的构造函数和析构函数

1、构造函数是否可以被继承 子类可以继承父类的所有成员变量和成员函数,但不能继承父类的构造函数,因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的额构造函数。 2、父类构造函数的调用规则 ①如果子类没有定义构造函数,则调用分类的无参构造函数。 ②如果子类定义了构造函数,不论是无参数还是带参数,在创建子类对象的时候,首先执行父类的无参数构造函数,然后执行自己的构造函数。 ③在创建子类对象的时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造你函数。 ④在创

zq9955的博客 2270

C++类构造函数初始化列表,子类向父类传参数

C++类构造函数初始化列表 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如: class CExample { public:     int a;     float b;     //构造函数初始化列表     CExample(): a(0),b(8.8)     {}     //构造函数

linking530的专栏 1万+
上一篇: Linux | su - 和 su root 的区别
下一篇: C++ | 构造函数,拷贝构造函数,赋值函数(运算符),构造函数初始化列表
Sherlock_Homles
博客等级 码龄12年 38粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值