C++派生类含有成员对象构造函数析构函数顺序

2023-11-07

参考博客:传送门1

当类中含有对象成员时:

  • 类的构造函数要包含对成员对象的初始化,如果构造函数的成员初始化列表没有包含对成员对象的初始化,系统会自动调用成员对象的无参构造函数。顺序上:先调用成员对象的构造函数,当所有的成员对象都执行了自身类的构造函数以后再执行当前类的构造函数
  • 调用析构函数时先调用类的构造函数,再调用成员对象的构造函数。

当类继承于另一个类时:

  • 如果没有显式地在构造函数的成员初始化列表中调用基类的构造函数,会自动先调用基类的无参构造函数。
  • 析构的时候先调用派生类的析构函数,再调用基类的构造函数。

当类中含有成员对象,同时继承了某个类的时候,他们的构造函数析构函数的顺序是固定的(与成员初始化列表中的顺序没有关系):

构造函数:基类->成员对象->派生类
析构函数:派生类->成员对象->基类

例如:

#include<iostream>
#include<cstdio>
using namespace std;

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

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

class B:public A
{
	C c;
public:
	B()
	{
		cout << "B" << endl;
	}
	~B()
	{
		cout << "~B" << endl;
	}
};

int main()
{
	B b;
}

运行结果:

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++派生类含有成员对象构造函数析构函数顺序 的相关文章

  • 【OpenCV学习笔记】【编程实例】一(VS2010/MFC+OPenCV2.4.7读取图片和摄像头)

    问题 VS2010 MFC OpenCV 显示图片 链接 http jingyan baidu com article f71d60375ddd411ab641d1e3 html 说明 可以了解一个基本的应用OpenCV的MFC程序的基本流
  • 【VS2010学习笔记】【异常处理】二(VS2008/VS2010中MFC“资源被另一个编辑器打开”)

    问题 VS2008 VS2010中MFC 资源被另一个编辑器打开 的有关问题 解决方法 菜单 窗口 选择 关闭所有文档 再次打开就可以了
  • dereferencing type-punned pointer will break strict-aliasing rules

    最近遇到了一个编译告警 严格别名和类型双关 整理一下相关的材料 strict aliasing 以下问题摘自1 I have the following questions If I leave the code with this war
  • 串口通信----串口接收框接收不到数据

    在进行串口调试时 数据发送没有问题 但是其他串口给该串口发送数据时 接收框始终接收不到数据 也不提示错误 感觉接收函数不起作用 对照之前没有问题的串口程序 发现只有这部分没有添加进去 其他都是一样的 问题应该在这里 添加进去后 正常接收了
  • C++中int与char相互转换

    一 ASCII表 了解int与char相互转换之前 先让我们看一下ASCII码表 其中数字字符对应的位置为 48 57 二 char转int char转int之前 先将运算式中的每个字符都转换成ASCII码值 再进行计算 以下代码为例 其中
  • c# 本机IP修改

    校园网总是要修改ip 去实验室也要修改ip 想着编一个IP修改的软件比较方便 我用的是 using System Management 报错的话记得在项目的引用中添加 右击 引用 添加引用 System Management private
  • Qt 数据库 bindValue()使用方法

    使用数据库时 有很多种添加数据到数据库的方法 我这里使用的是变量传递数据 q prepare INSERT INTO CAN3 eDevID eMeaning eType eCurrentValue eDescrible ePermissi
  • 【C++】一文详解lambda表达式用法及发展历程

    文章目录 1 lambda表达式语法 2 捕获列表 2 1 作用域 2 2 捕获值与捕获引用 2 3 特殊捕获方法 3 lambda表达式实现原理 4 无状态lambda表达式 5 在STL中使用lambda表达式 6 广义捕获 7 泛型l
  • 【VS2010学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之WM_TIMER消息处理函数的添加问题)

    在启动定时器后 就需要添加定时器的消息处理函数 基本的步骤就是 在VS中 用户界面设计右击打开Class Wizard 切换到Message选项卡 然后找到WM TIMER这个message 双击右边的OnTimer句柄 然后进入回调函数的
  • 字符串旋转(C#)

    字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部 请定义一个函数实现字符串左旋转操作的功能 比如 输入字符串 abcdefg 和数字2 该函数将返回左旋转两位得到的结果 cdefgab 来源 力扣 LeetCode 链接 ht
  • 【VS2010学习笔记】【函数学习】一(VC6.0和VS2010主函数的不同)

    问题 为什么VC6 0中主函数为main 而VS2010中为 tmain 1 Main是所有c或c 的程序执行的起点 tmain是main为了支持unicode所使用的main的别名 tmain 不过是unicode版本的的main 2 t
  • 常用设计模式-观察者模式

    观察者模式定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变时 所有依赖于它的对象都得到通知并被自动更新 它还有两个别名 依赖 Dependents 发布 订阅 Publish Subsrcibe 当观察者观察到事件到来之后 通知对
  • 【C语言】C语言的495个问题

    文章目录 1 声明和初始化 基本类型 1 1 各类型区别 1 2 为什么不精确定义标准类型的大小 1 3 因为C没有精确定义标准类型大小 那么用typedef定义int16和int32是否能解决问题呢 1 4 新64位机上64位类型是什么样
  • 推荐!国外程序员整理的 C++ 资源大全

    关于 C 框架 库和资源的一些汇总列表 由 fffaraz 发起和维护 内容包括 标准库 Web应用框架 人工智能 数据库 图片处理 机器学习 日志 代码分析等 标准库 C 标准库 包括了STL容器 算法和函数等 C Standard Li
  • 【事件驱动】【数码管识别】(C++多线程实现多幅图像的同步识别)

    一 问题的背景 二 问题的解决方法和思路 三 程序实现 四 遇到的问题 五 后续的工作
  • C#比较运算符及解析

    文章目录 博主写作不容易 孩子需要您鼓励 万水千山总是情 先点个赞行不行 比较运算符得出的结果是逻辑型 bool 即 True 或 False 比较运算符又称关系运算符 我们可以把它理解为一种判断 判断的结果是真或者是假 关系表达式的返回值
  • 常用设计模式-命令模式

    命令模式 讲一个请求封装成一个对象 可以让不同的请求对客户进行参数化 对请求排队或者记录请求日志 以及支持可撤销的操作 别名为事务模式或者动作模式 这样两者之间通过命令对象进行沟通 这样方便将命令对象进行储存 传递 调用 增加与管理 命令模
  • C++模板实参类型推导

    1 什么是模板 C 特性之一 批量生成代码的手段 2 模板有什么应用 1 泛型编程 例如 std vector 2 模板元编程 利用模板的特化等特性 在编译期计算出结果 例如 3 模板实参类型推导 虽然模板这么牛逼 但是今天我们不讲上述两个
  • C++-- 如何在类外访问一个类中私有的成员变量?

    如何在类外访问一个类中私有的成员变量 我在网上搜答案的时候看到大部分回答都是在类内部创建一个接口 所以此方法我就不再多做赘述 今天我说的是利用指针 边看代码边理解 上代码 class Test private int a 10 int b
  • 对象转成json后转成byte[]后在转成string会提示序列化失败,第一个字符是问号

    问题复现 一个对象需要转成json 后转成byte 后经过网络传输 后再次反序列化为对象 但是最后反序列的时候会报错 打印json发现开头是一个问号 省流 使用这个进行反序列化

随机推荐

  • github哪些协议能商用_版权->GitHub代码版权你关心过吗?

    作为一个无版权习惯的码农 终于遇到一个大坑 堵住了自己一条光明大路 那就是 版权 大部分程序员遵从的原则就是不重复造轮子 作为一个非著名相声演员 哦不 非大牛程序员 咳咳 把这句至理名言发挥的更是淋漓尽致 只要有需求 想好大致架构思路和逻辑
  • 数据组合利器:从入门到精通Python中的zip()函数应用

    介绍 zip 函数是Python内置的一个非常有用的函数 它可以将多个可迭代对象打包成一个元组构成的新的可迭代对象 本文将深入探讨zip 函数的用法 从入门到精通 目录 zip 函数的基本用法 使用zip 函数合并列表 使用zip 函数进行
  • Unity中的UGUI源码解析之事件系统(7)-输入模块(上)

    Unity中的UGUI源码解析之事件系统 7 输入模块 上 从今天开始 我们进入事件系统的的最后一部分 输入模块 InputModules 输入模块是事件系统的核心 是真正使用检测和调用回调的地方 输入模块主要有几个角色 分别为 BaseI
  • 深入了解jQuery的children方法

    jQuery是一种简化HTML文档遍历和操作 事件处理 动画和AJAX等常见任务的JavaScript库 而children 方法是其中之一 它是一个非常实用的方法 可以让我们在DOM树中轻松找到特定元素的子元素 并进行进一步操作 在本文中
  • Nginx配置参数解释

    目录 worker processes work cpu affinity worker rlimit nofile events模块 1 use method 2 worker connections 3 multi accept htt
  • grep正则表达式例子

    grep支持的正则表达式有很多 这里尽量全面地列出各种正则表达式及其说明 行首匹配 用于匹配字符串的开始 行尾匹配 用于匹配字符串的结束 匹配除换行符外的任意一个字符 匹配零个或多个前面的字符 匹配一个或多个前面的字符 匹配零个或一个前面的
  • 2020三校生英语计算机试卷,2020江西省“三校生”对口升学考试考试说明英语科目最新考试英语复习教材考前模拟试卷课本教材资料试题...

    三 题型示例 第 I 卷 选择题 共 125 分 单项选择题 共 25 小题 每小题 1 分 满分 25 分 从 A B C D 中 选出可以填入空白处的最佳选项 并在答题卡上将该项 填黑 1 Thank you very much Mr
  • Flink SQL CDC 的实时增量同步数据

    问题导读 1 怎样实现基于 Flink SQL CDC 的数据同步方案 2 CDC 是否需要保证顺序化消费 3 GROUP BY 结果如何写到 Kafka 传统的数据同步方案与 Flink SQL CDC 解决方案业务系统经常会遇到需要更新
  • 程序猿 C#常规面试题

    1 NET框架是什么 NET框架是Microsoft的软件开发框架 它提供了一个受控的编程环境 可以在基于Windows的操作系统上开发 安装和执行软件 2 NET和C 的区别 NET是一种框架 CLR公共语言运行库是 NET FrameW
  • Avalon 学习系列(四)—— 循环遍历

    Avalon2 的 ms for 绑定集齐了 ms repeat ms each ms with 的所有功能 更加好用 性能也提升了很多 Avalon 不需要 vue 或 react 那样使用 key 属性来提高性能 内部已经帮你搞定了 循
  • 1.1 计算机的发展与应用

    一 计算机的发展 1 计算机的发展 1 计算机的奠基人 艾兰 图灵 4个贡献 图灵机 可计算性理论 人工智能之父 图灵奖 冯 诺依曼 5个贡献 EDVAC 存储程序 现代计算机的基本结构 计算机之父 五部分 2 第一台 首台通用电子计算机
  • readme for esoe tools

    Pack hta Pack hta is a tool of ESOE to pack js files It s also a demo of ESOE It has below features file New Open Saveed
  • L->data 与 L.data比较

    L gt data 与 L data比较 当L是结构体 类的 指针时 用L gt data指明结构体中的变量 面向对象中 类的对象 而当L data则是结构体变量 类的对象 用L data表示
  • docker 容器绑定hosts

    问题 最近有个需求需要在docker容器里进行hosts绑定 尝试了将hosts 写在Dockerfile里 构建出镜像 但是启动容器后绑定的hosts会丢失 而且手动进入容器绑定hosts后 重启容器后hosts也会丢失 原因 简单的说
  • tensorflow的归一化与梯度下降

    代码 coding utf 8 By author MZ import numpy as np from sklearn datasets import load boston import tensorflow as tf from sk
  • Linux下查询比较大的文件命令

    size medium color blue b Linux下查询很大文件的快速命令 b color size find usr sersync type f size 3k color green size medium 这个命令意思是
  • linux backlog,linux下backlog设置 - 就爱阅读网

    当业务有高并发的情况的时候 需要调整backlog 对于PHP而言 需要注意以下3方面 1 操作系统 sysctl 2 web端 nginx 3 php后端 php fpm 操作系统以Ubuntu为例 编辑默认配置文件 etc sysctl
  • C++: 输入二进制以十进制显示

    C 输入二进制以十进制显示 代码展示 代码展示 输入二进制以十进制显示 include
  • regsvr32 /i hhctrl.ocx出现无法注册

    运行 输入regsvr32 i hhctrl ocx出现无法注册hhctrl ocx 无法找到dllinstall输入点 无法注册这个文件 在另一台电脑c windows system32 itss dll拷这个文件过去另一电脑的同一路径
  • C++派生类含有成员对象构造函数析构函数顺序

    参考博客 传送门1 当类中含有对象成员时 类的构造函数要包含对成员对象的初始化 如果构造函数的成员初始化列表没有包含对成员对象的初始化 系统会自动调用成员对象的无参构造函数 顺序上 先调用成员对象的构造函数 当所有的成员对象都执行了自身类的