派生类的构造与析构函数(C++)

    • 3.3 派生类的构造与析构函数
      • 3.3.1 构造
      • 3.3.2 析构

3.3 派生类的构造与析构函数

3.3.1 构造

  • 如果子类构造函数没有显式指明基类部分(基类子对象)的初始化方式,那么编译器将会自动调用基类的无参构造函数来初始化基类子对象。

  • 如果希望以有参的方式来初始化基类部分,那么必须使用初始化列表来显式指明

  • 子对象构造顺序

    • 分配内存
    • 构造基类子对象(按继承表顺序)
    • 构造成员子对象(按声明顺序)
    • 执行子类构造函数代码
    #include <iostream>
    using namespace std;class Member{
    private:int m_m;
    public:Member(){cout << "Member()" << endl;}Member(int m) {cout << "Member(int)" << endl;m_m = m;}
    };class Base {
    private:int m_i;
    public:Base(){cout << "Base()" << endl;}Base(int i){cout << "Base(int)" << endl;m_i = i;}
    };class Derived:public Base{
    private:int m_d;Member m_me;
    public:Derived(){cout << "Derived()" << endl;//不指定作用域 默认调用无惨构造函数}Derived(int d):Base(d), m_me(d){ //指定作用域 就调用有参构造函cout << "Derived(int)" << endl;m_d = d;}
    };
    int main (void) {Derived d1;Derived d2(100);return 0;
    }
    

3.3.2 析构

  • 子类的析构函数,无论自己定义的,还是编译器缺省提供,都会自动调用基类的析构函数,完成基类子对象的销毁

  • 子类对象销毁过程

    • 执行子类析构函数代码
    • 析构成员子对象(按声明逆序)
    • 析构基类子对象(按继承表逆序)
    • 释放内存
    #include <iostream>
    using namespace std;class Member{
    private:int m_m;
    public:Member(){cout << "Member()" << endl;}Member(int m) {cout << "Member(int)" << endl;m_m = m;}~Member(){cout << "~Member()" << endl;}
    };class Base {
    private:int m_i;
    public:Base(){cout << "Base()" << endl;}Base(int i){cout << "Base(int)" << endl;m_i = i;}~Base(){cout << "~Base()" << endl;}
    };class Derived:public Base{
    private:int m_d;Member m_me;
    public:Derived(){cout << "Derived()" << endl;//不指定作用域 默认调用无惨构造函数}Derived(int d):Base(d), m_me(d){ //指定作用域 就调用有参构造函cout << "Derived(int)" << endl;m_d = d;}~Derived(){cout << "~Derived()" << endl;}
    };
    int main (void) {Derived d1;return 0;
    }//输出结果:
    myubuntu@ubuntu:~/lv19/cplusplus/dy03$ ./a.out 
    Base()
    Member()
    Derived()
    ~Derived()
    ~Member()
    ~Base()
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/584527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java SSM课程平台系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM课程平台系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…

【方法】Word文档如何设置密码?

Word文档可以设置密码保护&#xff0c;如果想要保护文档不被随意打开&#xff0c;可以设置“打开密码”&#xff1b;如果想保护文档不被随意编辑&#xff0c;可以设置“限制密码”&#xff1b;如果当心自己不小心修改了文档&#xff0c;可以设置“只读模式”密码&#xff0c;使…

一篇文章带你入门PHP魔术方法

PHP魔术方法 PHP 中的"魔术方法"是一组特殊的方法&#xff0c;它们在特定情况下自动被调用。这些方法的名称都是以两个下划线&#xff08;__&#xff09;开头。魔术方法提供了一种方式来执行各种高级编程技巧&#xff0c;使得对象的行为可以更加灵活和强大。以下是一…

DSG YashanDB数据交互解决方案:更稳、更快、更安全

近期&#xff0c;深圳计算科学研究院&#xff08;简称“深算院”&#xff09;携手迪思杰&#xff08;北京&#xff09;数据管理技术有限公司&#xff08;简称“DSG”&#xff09;重磅推出基于崖山数据库的数据交互解决方案&#xff0c;具备双向迁移同步、性能稳定、支持复杂对象…

余弦相似度算法

余弦相似度算法 是什么 余弦距离&#xff0c;也称为余弦相似度&#xff0c;是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。 余弦值越接近1&#xff0c;就表明夹角越接近0度&#xff0c;也就是两个向量越相似&#xff0c;这就叫"余弦相似性&q…

表情串转换

前言 NWAFU 2021阶段二 D 一、题目描述 题目描述 在一个字符串中&#xff0c;设置了由‘/’前导字符和某些特定字母构成的转义子字符串&#xff0c;如“/s”、“/f”、“/c”等用于表示特殊表情符号。现要求编写一个函数&#xff0c;将给定字符串中的转义字符串转换为表情字…

AD20PCB笔记(写给第三次重学PCB的自己)

readme&#xff1a;我曾以为自己本科毕业以后&#xff0c;再也不会用到PCB了&#xff0c;因为本科毕设的时候自己设计的PCB开发板出现了严重的设计问题&#xff0c;在实际测试的过程中&#xff0c;电源一上电&#xff0c;板子芯片直接炸飞&#xff0c;当时真的让我很害怕&#…

JavaScript实现视频共享

1.视频共享webrtc-master index.html <!DOCTYPE html> <html> <head><script typetext/javascript srchttps://cdn.scaledrone.com/scaledrone.min.js></script><meta charset"utf-8"><meta name"viewport" cont…

c++学习笔记(10)-可变参数模板

1、概念 可变参数模板&#xff08;Variable Template Parameters&#xff09;是 C11 中引入的一种语法&#xff0c;它允许函数或类模板接受可变数量的参数。这样可以方便地定义操作适用于多个类型和/或值的函数或类模板。 使用可变参数模板时&#xff0c;可以在模板参数列表中…

【MySQL】在数据目录之外创建InnoDB 表(Creating Tables Externally)

文章目录 【MySQL】在数据目录之外创建InnoDB 表&#xff08;Creating Tables Externally&#xff09;创建表时使用DATA DIRECTORY选项&#xff08;单独表空间&#xff09;innodb_file_per_table设置为开启状态&#xff08;默认&#xff09;innodb_file_per_table设置为关闭状态…

linux iptables简介

表与链 iptables是4表五链 4表&#xff1a;filter表&#xff08;过滤表&#xff09; nat表 raw表 mangle表 五链&#xff1a;INPUT OUTPUT FORWARD PREROUTING POSTROUTING &#xff08;所有链的名字要大写&#xff09; pre…之前 post…之后 filter表 iptables默认操作…

机器学习距离度量方法

1. 机器学习中为什么要度量距离&#xff1f; 机器学习算法中&#xff0c;经常需要 判断两个样本之间是否相似 &#xff0c;比如KNN&#xff0c;K-means&#xff0c;推荐算法中的协同过滤等等&#xff0c;常用的套路是 将相似的判断转换成距离的计算 &#xff0c;距离近的样本相…

K-means 聚类算法分析

算法简述 K-means 算法原理 我们假定给定数据样本 X &#xff0c;包含了 n 个对象 &#xff0c;其中每一个对象都具有 m 个维度的属性。而 K-means 算法的目标就是将 n 个对象依据对象间的相似性聚集到指定的 k 个类簇中&#xff0c;每个对象属于且仅属于一个其到类簇中心距离…

Jetson Orin安装riva以及llamaspeak,使用 Riva ASR/TTS 与 Llama 进行实时交谈,大语言模型成功运行笔记

NVIDIA 的综合语音 AI 工具包 RIVA 可以处理这种情况。此外&#xff0c;RIVA 可以构建应用程序&#xff0c;在本地设备&#xff08;如 NVIDIA Jetson&#xff09;上处理所有这些内容。 RIVA 是一个综合性库&#xff0c;包括&#xff1a; 自动语音识别 &#xff08;ASR&#x…

Java创建线程执行任务的方法(一)

目录 1.继承Thread类 2.实现Runnab类 2.1实现Runnable类 2.2使用Lambda表达式 3.实现Callable类 3.1返回Integer类型数据 3.2返回String类型数据 3.3返回Object类型数据 4.匿名内部类 创建线程的方法&#xff1a;继承Thread类&#xff1b;实现Runnab类&#xff1b;匿名…

如何文件从电脑传到iPhone,这里提供几个方法

本文介绍了如何使用Finder应用程序、iTunes for Windows、iCloud和谷歌照片将照片从Mac或PC传输到iPhone。 如何将照片从Mac传输到iPhone 如果你有一台Mac电脑&#xff0c;里面装满了你想转移到iPhone的照片&#xff0c;这是一件非常简单的事情。只需遵循以下步骤&#xff1a…

Python中matplotlib库的使用1

1 matplotlib库简介 matplotlib是一个数学绘图库&#xff0c;可以将数据通过图形的方式显示出来&#xff0c;也就是数据可视化。 2 matplotlib库的安装 2.1 打开cmd窗口 点击键盘的“Win”“R”键&#xff0c;在弹出的“运行”对话框的“打开”栏中输入“cmd”&#xff0c;…

【UE5.1】程序化生成Nanite植被

目录 效果 步骤 一、下载Gaea软件和树林资产 二、使用Gaea生成贴图 三、 生成地形 四、生成草地 五、生成树林 六、生成湖泊 七、其它功能介绍 7.1 调整树林生成的面积 7.2 让植物随风飘动 7.3 玩家和植物互动 7.4 雪中树林 7.5 环境音效 效果 步骤 一、下载Ga…

什么是reactor模式

Reactor模式是一种事件驱动的设计模式&#xff0c;主要用于处理高并发的I/O操作。在该模式中&#xff0c;一个中心的“反应器”&#xff08;Reactor&#xff09;对象负责监听和分发来自多个客户端的事件请求到相应的处理器&#xff08;Handler&#xff09;。 以下是在Reactor模…

循环冗余效验码的计算方法

循环冗余效验码的计算方法 G&#xff08;x&#xff09;&#xff1a; 在了解计算方法之前我们首先要明白G&#xff08;x&#xff09;表明的意思&#xff0c;这一步非常重要&#xff01; 例如&#xff0c;G&#xff08;x&#xff09; x^3 x^2 1 &#xff0c;该式子表明的编…