和构造函数类似,析构函数也不能被继承。与构造函数不同的是,在派生类的析构函数中不用显式地调用基类的析构函数,因为每个类只有一个析构函数,编译器知道如何选择,无需程序员干涉。

另外析构函数的执行顺序和构造函数的执行顺序也刚好相反:
创建派生类对象时,构造函数的执行顺序和继承顺序相同,即先执行基类构造函数,再执行派生类构造函数。
而销毁派生类对象时,析构函数的执行顺序和继承顺序相反,即先执行派生类析构函数,再执行基类析构函数。

请看下面的例子:

#include <iostream>
using namespace std;class A{public:A(){cout<<"A constructor"<<endl;}~A(){cout<<"A destructor"<<endl;}
};class B: public A{public:B(){cout<<"B constructor"<<endl;}~B(){cout<<"B destructor"<<endl;}
};class C: public B{public:C(){cout<<"C constructor"<<endl;}~C(){cout<<"C destructor"<<endl;}
};int main(){C test;return 0;
}

运行结果:

A constructor
B constructor
C constructor
C destructor
B destructor
A destructor

C++ 基类和派生类的析构函数相关推荐

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

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

  2. C++:基类和派生类

    4.1 派生类的声明 继承实例如下: class Person{ //声明基类Person public:void print(){cout<<"name:"<& ...

  3. 基类、派生类、虚基类、虚函数、虚析构、纯虚函数、抽象类

    基类:被其它类通过继承方式作为父类继承的类称为基类:描述派生类的统一种类的方式. 派生类:通过继承其他类(并可能含有自定义成员)实现的子类:为提高代码的重用性及与同样继承于同一个父类的其它类形成统一种 ...

  4. C++学习 十五、类继承(1)基类,派生类,访问权限,protected

    C++学习 十五.类继承(1)基类,派生类 前言 类继承 类的关系与继承 基类, 派生类 基类 派生类 构造函数,析构函数 文件位置 访问权限 protected 后记 前言 本篇开始学习C++类的继 ...

  5. 14.11 基类与派生类关系的详细再探讨

    一:派生类对象模型简述 Men mymen:子类(派生类对象),包含多个组成部分(也就是多个子对象); <1>一个是含有派生类自己定义的成员变量,成员函数的子对象: <2>一个 ...

  6. C++ 类的继承,基类,派生类

    继承: 当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可. 这个已有的类称为基类,新建的类称为派生类. 例: //基类class Animal {// ...

  7. 派生类到基类的转换 和基类到派生类的转换

    一. 基类与派生类的转换     3种继承方式(公用.保护.私有继承)中,公用派生类才是基类真正的子类型,它完整地继承了基类的功能.     不同类型数据之间在一定条件下可以进行类型的转换.基类与派生 ...

  8. 基类与派生类之间的转换关系

    一. 派生类到基类的转换: 1.可以使用派生类指针初始化基类指针,同样也可以使用派生类的引用或对象初始化基类的引用,注意这里提到的是对象的指针和引用而不是对象本身: (但是,在使用基类指针(或引用)指 ...

  9. 构造函数怎么在主函数调用_C++ 虚基类及其派生类构造函数(学习笔记:第7章 12)...

    虚基类及其派生类构造函数[1] 建立对象时所指定的类称为最远派生类. 虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的. 在整个继承结构中,直接或间接继承虚基类的所有派生类,都 ...

  10. c++中基类与派生类中隐含的this指针的分析

    先不要看结果,看一下你是否真正了解了this指针? 1 #include<iostream> 2 using namespace std; 3 4 class Parent{ 5 publ ...

最新文章

  1. CH-Round-#63-OrzCC杯#2省选热身赛
  2. Android 接入baceBook
  3. 一个合格的web前端程序员要学会哪些技能?
  4. Keras-常用代码
  5. 服务器重装 pe,WinPE 下安装 Windows Server 2003 服务器
  6. 在linux下编译boost库【搜集】
  7. LIve Writer图片自动水印,自动居中,自动为原始大小的设置方法.
  8. java 设置颜色_java 中怎样设置窗口的颜色
  9. “交通·未来”第22期:城市轨道交通管理与控制优化:相关问题及方法
  10. mysql 批量插入 优化_mysql 批量插入优化之rewriteBatchedStatements
  11. 将Tomcat注册成系统服务,并且设置成系统自启动项
  12. C++ 工厂模式(Factory 模式)简介与实现
  13. 中国甜奶油粉市场趋势报告、技术动态创新及市场预测
  14. 随机数模拟抛硬币实验
  15. Jmeter应用-接口测试
  16. 在线音乐播放项目——BY音乐
  17. labview调用外部仪器设备案例一(标签打印机)
  18. 【评测】Tecan品牌系列产品
  19. HTK 安装、编译以及测试——Ubuntu 14.04
  20. Android App Widget中如何调用RemoteView中的函数

热门文章

  1. c++new时赋初值_C高级编程精髓之内存管理,万千码农踩过的雷,大神带你走出雷区...
  2. AVR单片机计算器C语言源程序,一个基于AVR单片机的计算器程序.doc
  3. mysql中的comment用法
  4. mysql8.0与mysql7.0_MySQL 5.7 vs 8.0,哪个性能更牛?
  5. MySQL————表维护相关低频操作总结
  6. MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
  7. 一篇读懂--mybatis的缓存
  8. 局域网打印机反应慢_为什么你的Excel这么慢,这些原因必须要知道!
  9. 计算机桌面程序名,深度技术win7旗舰版电脑桌面图标只显示名称了怎么办
  10. 基于深度学习的手写数字识别、python实现