1. 顺序

  先调用基类的构造函数,再调用派生类构造函数。析构顺序相反。

2. 构造函数

  派生类 不用初始化列表调用基类构造函数->调用基类的默认构造函数

  派生类 使用初始化列表调用基类带参构造函数->调用基类相关的带参构造函数

  若派生类有多个构造函数版本,其中任意一个基类的构造函数不匹配,都会出错。

3. 复制构造函数

  派生类 未定义复制构造函数 ->调用基类的复制构造函数(如果有)或默认复制构造函数,和派生类的默认复制构造函数

  派生类 定义了复制构造函数  未使用初始化列表调用基类复制构造函数 -> 调用基类默认构造函数

派生类 定义了复制构造函数  使用初始化列表调用基类复制构造函数 -> 调用基类复制构造函数(如果有)或默认复制构造函数

例子:

#include<iostream>
using namespace std;class A
{
public:A(){cout << "A 默认构造函数" << endl;}A(int i){cout << "A A(int i)构造函数" << endl;}~A(){cout << "A 析构函数" << endl;}A(const A & obj){cout << "A 复制构造函数" << endl;}
};class B : public A
{
public:B(){cout << "B 默认构造函数" << endl;}B(int j):A(j){cout << "B B(int j):A(j)" << endl;}~B(){cout << "B 析构函数" << endl;}B(const B & obj)  //调用A的默认构造函数
    {cout << "B 复制构造函数" << endl;}//B(const B & obj):A()  //调用A的默认构造函数//{//    cout << "B 复制构造函数" << endl;//}//B(const B & obj):A(obj)  //调用A的复制构造函数//{//    cout << "B 复制构造函数" << endl;//}
};int main()
{{cout << "----------------------" << endl;B b;cout << "----------------------" << endl;B b1(3);cout << "----------------------" << endl;B b2(b);cout << "----------------------" << endl;}return 0;
}

转载于:https://www.cnblogs.com/dplearning/p/4785346.html

【C++】继承时构造函数和析构函数相关推荐

  1. C++类继承时构造函数与析构函数的执行顺序

    C++类继承时构造函数与析构函数的执行顺序 在C++类中,类A继承类B时,如果创建一个A的对象时,会首先调用基类的构造函数,再调用派生类的构造函数,而析构函数的执行相反,但是当基类和派生类分别有一个成 ...

  2. 多继承的构造函数和析构函数

    //程序2:多继承的构造函数 与 析构函数 #include<iostream> using namespace std;class A { public: A() { cout<& ...

  3. Java继承时构造函数的关系

    Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...

  4. c++远征之继承篇——继承的概念、继承时构造函数/析构函数的先后顺序

    1.继承的概念 2.继承中,构造函数和析构函数的先后顺序

  5. C++虚继承中构造函数和析构函数顺序问题以及原理

    多重继承的问题:多个类B,C,-继承同一个类A导致如果X继承了B,C,-那么在X中将还有多个A中成员的拷贝,如果想要访问A中的成员如果不加名字空间将会导致二义性,这种拷贝大多是没有实际意义的,为了避免 ...

  6. 公有继承中 构造函数和析构函数的调用(包含内嵌子对象)

    先祖先后客人再自己. #include<iostream>#include<cstdio>using namespace std;class B0 { public:B0(){ ...

  7. C++虚继承时的构造函数

    在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数.对最终的派生类来说,虚基类是间接基类,而不是直接基类.这跟普通继承不同,在普通继承中,派生类构造函 ...

  8. C++关于虚基类、构造函数、析构函数、成员对象的两个程序浅析

    预备博客: C++虚继承中构造函数和析构函数顺序问题以及原理 C++派生类含有成员对象构造函数析构函数顺序 C++虚基类成员可见性 程序一如下: #include<iostream> us ...

  9. C++继承中构造函数、析构函数调用顺序及虚析构函数

    首先说说构造函数,大家都知道构造函数里就可以调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就可以调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数, ...

最新文章

  1. 2016 ICPC World Finals -Ceiling Function
  2. c#泛型作为返回类型的写法
  3. [深度学习TF2] 梯度带(GradientTape)
  4. d3 svg path添加文本_数据可视化——D3展现数据最炫丽的一面
  5. 超级搜索术,提升解决问题的能力
  6. VS2003添加.BMP资源
  7. 计算机专业暑期三下乡活动方案,暑期三下乡活动方案
  8. linux更新war包操作步骤,关于Linux系统下基于Tomcat部署和升级war包的详细过程
  9. 华为数据存储用户精英论坛,信心与合作的故事
  10. Android程序员简历
  11. 只读(Readonly)与禁用(Disable)的区别与使用
  12. 深度学习花朵识别系统的设计与实现
  13. cad计算机平方,AutoCAD的平方符号怎么打出来?
  14. 淫荡气息溢满魔都……
  15. WordPress登录注册系统的优化
  16. Gem5与NVMain混合编译(一)
  17. 数组是“二等公民”的话题
  18. php 怎么上传图片,php怎么把图片上传到图片服务器
  19. 主编编辑器如何添加超链接?
  20. 06Cadengce Allegro向导制作BGA封装

热门文章

  1. docker 启动容器的时候没-p 后面怎么加-p_基于Docker搭建基础自动化部署
  2. dml操作mysql_数据库DML操作(DCL了解)
  3. python不同颜色的代码_python日志通过不同的等级打印不同的颜色(示例代码)
  4. jsf入门实例_JSF selectManyListBox示例教程
  5. mvc crud_Spring MVC Hibernate MySQL集成CRUD示例教程
  6. Python reversed()函数
  7. .net 编译、反编译、查壳、脱壳、反混淆工具
  8. 查看C++ C#的dll或exe文件是32位还是64位
  9. 开课吧:Webpack的构建流程是什么?
  10. Django 缓存、序列化、信号