参考博客:传送门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;
}

运行结果:

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

  1. C++:派生类中的构造函数问题

    1.基类中没有定义构造函数(就是用默认构造函数)或像下面这种定义一个空的构造函数.此时派生类中的构造函数就照常写 #include<iostream> using namespace st ...

  2. C++ 基类和派生类的virtual虚析构函数

    virtual虚函数与C++的多态息息相关,C++中基类采用virtual虚析构函数主要目的是为了防止潜在的内存泄漏. 具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放.假 ...

  3. c++语言 自己构造函数 成员对象构造函数 调用顺序,C++类成员构造函数和析构函数顺序示例详细讲解...

    对象并不是突然建立起来的,创建对象必须时必须同时创建父类以及包含于其中的对象.C++遵循如下的创建顺序: (1)如果某个类具体基类,执行基类的默认构造函数. (2)类的非静态数据成员,按照声明的顺序创 ...

  4. 【跟学C++】C++类与对象—构造函数—析构函数(Study10)

    文章目录 1.面向对象(类与对象) 1.1 类 1.2 对象 1.3 访问之句点运算符(.) 1.4 访问之指针运算符(->) 2.public(公有)和private(私有) 3.构造函数 3 ...

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

    派生类继承了基类的成员,实现了代码的重复利用,但基类的构造函数和析构函数不能被继承.如果在派生类中需要对新增加的成员进行初始化,则需要加入派生类的构造函数.同样派生类也需要添加析构函数来实现一些结束工 ...

  6. C++中基类与派生类的构造函数和析构函数

    1.Cpp中的基类与派生类的构造函数 基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承.构造函数不能被继承是有道理的,因为即使继承了,它的名字和 ...

  7. 派生类构造函数的执行顺序

    一个派生类构造函数的执行顺序如下: 虚拟基类的构造函数(多个虚拟基类则按照继承的顺序执行构造函数). 基类的构造函数(多个普通基类也按照继承的顺序执行构造函数). 对象的vptr被初始化: 成员对象构 ...

  8. 派生类中构造函数与虚构函数的研究

    1.继承过程中的构造函数 A:继承与派生过程中,基类的构造函数不能被继承,派生类中需要声明自己的构造函数. B:声明构造函数时,只需要对本类中新增成员进行初始化.至于基类继承过来的成员,应该调用基类的 ...

  9. 派生类的构造函数xu(c++)

    接上节: class Base {public:int n;Base(int i):n(i) { cout << "Base " << n << ...

最新文章

  1. 深入理解 python 元类
  2. 有什么事是你当了程序员才知道的? | 每日趣闻
  3. 【Python 13】分形树绘制1.0--五角星(turtle库)
  4. javaee实训报告总结_程力汽车集团隆重召开专业厂暨集团成员厂上半年经营工作总结表彰会。2、程力集团专汽公告培训会圆满结束...
  5. 第一类修正贝塞尔函数的C语言实现
  6. iscsi:IO操作流程(四)
  7. eclipse安装cppcheck
  8. 【PetShop 4.0学习】1.技术特点
  9. c语言编程定义符号,C语言:条件编译及预定义符号知识详解
  10. 显卡的测试软件是什么,你的显卡是什么水平,用这个软件就知道了
  11. 记录一次恶意软件排查
  12. Ajax传参里面含有特殊字符
  13. 什么是绝对URL、相对URL
  14. CCF CSP 认证相关
  15. OSPF协议介绍➌(认证、汇总扩展、LSDB的保护特性、缺省路由、附录E、选路规则、SPF算法、NP+E位、FA地址)
  16. C语言多轴插补,C语言算法- 插补搜寻法
  17. Unity UI Text组件添加contentsizefitter后获取RectTransform宽度
  18. PHP 八羊闪电本地相册图片查看器V1 PHP极简代码直接查看本地文件夹图片 源码下载!
  19. 微信分享的app下载链接无法打开,显示已停止访问该网页的原因和解决方案
  20. 大数据集群失联问题解决方案

热门文章

  1. kubernetes cpu限制参数说明
  2. 美团点评DBProxy读写分离使用说明
  3. R软件中 文本分析安装包 Rjava 和 Rwordseg 傻瓜式安装方法四部曲
  4. 如何解决EDM邮件营销中的图片难题
  5. java21个知识点重点_java21个知识点重点
  6. linux 线程带参数,Linux中多线程编程并传递多个参数的简单例子
  7. 表单必填标星_怎么用JS做form表单验证,要详细代码,求救!(带星号的是必填项)...
  8. 怎么让员工服从管理_为什么现在的员工执行力和服从性越来越差,管理一严格就辞职?...
  9. windows无法连接到某个wifi_windows无法连接到无线网络怎么办【解决方法】
  10. java对hashmap迭代_Java:通过HashMap迭代,这样更有效率?