C++类继承时构造函数与析构函数的执行顺序
C++类继承时构造函数与析构函数的执行顺序
在C++类中,类A继承类B时,如果创建一个A的对象时,会首先调用基类的构造函数,再调用派生类的构造函数,而析构函数的执行相反,但是当基类和派生类分别有一个成员对象时,构造函数与析构函数的执行顺序又是怎样的呢?
基类有成员对象
说明:三个类分别为Base,Son和Temp,类图如下所示:
代码示例:
#include <iostream>using std::cout;
using std::endl;class Temp { // 成员类
public:Temp() {cout << "Temp类的构造函数执行~" << endl;}~Temp() {cout << "Temp类的析构函数执行~" << endl;}
};
class Base { //基类
private:Temp temp;
public:Base() {cout << "Base类的构造函数执行~" << endl;}~Base() {cout << "Base类的析构函数执行~" << endl;}
};
class Son : public Base { // 派生类
public:Son() {cout << "Son类的构造函数执行~" << endl;}~Son() {cout << "Son类的析构函数执行~" << endl;}
};int main() {Son son;return 0;
}
执行结果如图所示:
结论:
构造函数的执行顺序:先调用基类成员对象的构造函数,再调用基类的构造函数,最后调用派生类的构造函数;析构函数调用顺序相反。
派生类有成员函数
类图如下:
测试代码:
#include <iostream>using std::cout;
using std::endl;class Temp {public:Temp() {cout << "Temp类的构造函数执行~" << endl;}~Temp() {cout << "Temp类的析构函数执行~" << endl;}
};
class Base {public:Base() {cout << "Base类的构造函数执行~" << endl;}~Base() {cout << "Base类的析构函数执行~" << endl;}
};
class Son : public Base {private:Temp temp;
public:Son() {cout << "Son类的构造函数执行~" << endl;}~Son() {cout << "Son类的析构函数执行~" << endl;}
};int main() {Son son;return 0;
}
执行结果:
结论:
构造函数的执行顺序:先调用基类的构造函数,再调用派生类成员对象的构造函数,最后调用派生类的构造函数;析构函数调用顺序相反。
C++类继承时构造函数与析构函数的执行顺序相关推荐
- 实验3.1 定义一个CPU类,观察构造函数和析构函数的调用顺序
题目 定义一个CPU类,包含等级(rank).频率(frequency).电压(voltage)等属性,有两个公有成员函数run.stop.其中,rank为枚举类型CPU_Rank,定义为enum C ...
- 【C++】继承时构造函数和析构函数
1. 顺序 先调用基类的构造函数,再调用派生类构造函数.析构顺序相反. 2. 构造函数 派生类 不用初始化列表调用基类构造函数->调用基类的默认构造函数 派生类 使用初始化列表调用基类带参构造函 ...
- 派生类构造函数和析构函数的执行顺序
派生类继承了基类的成员,实现了代码的重复利用,但基类的构造函数和析构函数不能被继承.如果在派生类中需要对新增加的成员进行初始化,则需要加入派生类的构造函数.同样派生类也需要添加析构函数来实现一些结束工 ...
- 多重继承的构造函数和析构函数的执行顺序(包含虚基类)
下面示例就是说明多重继承析构函数和构造函数的执行顺序: #include <iostream> using namespace std;class A {public:A(int i){c ...
- 一文读懂C#中的抽象类、抽象方法、virtual虚函数、override重写函数及父类子类构造函数和析构函数的执行顺序
// 父类 class People {public People(){Console.WriteLine("执行People构造函数!");}public virtual voi ...
- C++类引用中的构造函数与析构函数的执行顺序练习
引用的类比被引用的类后构造,先析构 #include <iostream> #include <string>using namespace std;class Phone { ...
- c++远征之继承篇——继承的概念、继承时构造函数/析构函数的先后顺序
1.继承的概念 2.继承中,构造函数和析构函数的先后顺序
- 多继承的构造函数和析构函数
//程序2:多继承的构造函数 与 析构函数 #include<iostream> using namespace std;class A { public: A() { cout<& ...
- Java继承时构造函数的关系
Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...
最新文章
- 【计算机网络】应用层 : 网络应用模型 ( 应用层概述 | 客户端 / 服务器 模型 | P2P 模型 )
- 寻找数组中最小的k个数(快排和堆排)
- 使用.udl快速测试与数据库的连接并得到连接字符串
- 【C++、Matlab】VS2013 C++读写.mat文件
- Delphi XE7 用indy开发微信公众平台(3)- 验证消息真实性
- python set() 和 dict()
- Nginx 基于nginx-sticky-module模块进行会话保持
- 如何判断一个女孩是不是真的爱你?
- 计算机电子电路原理图,经典六款电路图集锦(图文)
- 慧编程python硬件_什么是慧编程?慧编程介绍
- thrift文件服务器,Thrift功能和使用
- prop()方法的应用
- python开发的著名游戏制作人是_Python 曾经开发过哪些了不起的程序或游戏?
- airsim-使用Image api保存机载摄像机的图片
- 2017年全国大学生电子设计竞赛综合测评题目解析——Multisim仿真
- 小学-知识与能力【10】
- 搭建DNF台服之服务器篇
- Retrofit网络请求数据的使用
- MapReduce中文翻译
- 计算机发展史的pdf文档,计算机的发展历程.pdf
热门文章
- 从孔子的“名不正则言不顺”,看公司治理体系建立的循序渐进过程
- 如何查大学计算机考证成绩查询
- 【机组】--总线-例题
- 报错:com.google.common.collect.Sets$SetView.iterator()Lcom/google/common/collect/UnmodifiableIterator;
- 网页文档幅制方法【网页文字如何免费复制】
- workbench mesh学习笔记1
- 用户登录根据角色跳转至不同页面
- 高端设计公司的意象创意
- 大模型,化繁为简归文心
- python数据分析微信_Python微信好友数据分析