博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
详解派生类构造函数与析构函数
阅读量:6094 次
发布时间:2019-06-20

本文共 1417 字,大约阅读时间需要 4 分钟。

1.派生类构造函数:

派生类不能继承基类的构造函数,必须自己定义构造函数进行新增数据成员初始化工作,如果想同时初始化基类数据成员,必须调用基类构造函数

(1)简单派生类构造函数:

1 #include 
2 3 #include
4 5 using namespace std; 6 7 8 9 class St110 11 {12 13 public:14 15 //基类构造函数,初始化成员变量16 17 St1(int n, string na, char se):num(n),name(na),sex(se){cout<<"St1"<

输出:

 

(2)包含子对象的派生类构造函数:

#include 
#include
using namespace std; class St1{public://基类构造函数,初始化成员变量 St1(int n, string na, char se):num(n),name(na),sex(se){cout<<"St1"<

 输出:

 

几点注意:

1).在调用派生类构造函数之前,系统会先调用基类的构造函数;如果派生类构造函数列表中包含对基类子对象成员的初始化(如上例中的monitor),每个基类子对象初始化时也要调用一次基类构造函数;最后才是派生类调用自身的构造函数来初始化自身新增的成员(如上例中的age,addr)。执行顺序就是派生类构造函数列表顺序:

St2(int n, string na, char se, int n_m, string na_m, char se_m, int a, string add):St1(n,na,se)[1],monitor(n_m,na_m,se_m)[2]

         {age = a; addr = add;cout<<"St2"<<endl;}[3]

2).当然,对上述三种类型进行参数初始化时,会出现以下几种特殊情况:

(a) 派生类新增成员不需要进行初始化(很常见):

St2(int n, string na, char se, int n_m, string na_m, char se_m):St1(n,na,se)[1],monitor(n_m,na_m,se_m)[2]{}       

(b)基类没有定义构造函数或者基类构造函数无参—调用基类默认构造函数

St2(int a, string add ){age = a; addr = add;cout<<"St2"<<endl;}[3]

(c) 基类中重载了构造函数,既有有参的又有无参的,具体调用哪个视派生类构造函数参数个数而定

 

 

2.派生类的析构函数【】:

(1).正如派生类不能继承基类的构造函数,派生类也不能继承基类的析构函数派生类的清理工作由派生自身析构函数负责,基类的清理工作由基类析构函数负责。

(2).析构函数的调用顺序正好和构造函数调用顺序相反,即先调用派生类析构函数清理新增的成员,再调用子对象析构函数(基类析构函数)清理子对象,最后再调用基类析构函数清理基类成员。

转自:http://www.cnblogs.com/always-chang/p/6118423.html

你可能感兴趣的文章
淘宝的几个架构图
查看>>
Android扩展 - 拍照篇(Camera)
查看>>
JAVA数组的定义及用法
查看>>
充分利用HTML标签元素 – 简单的xtyle前端框架
查看>>
设计模式(十一):FACADE外观模式 -- 结构型模式
查看>>
iOS xcodebuile 自动编译打包ipa
查看>>
程序员眼中的 SQL Server-执行计划教会我如何创建索引?
查看>>
【BZOJ】1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路(floyd)
查看>>
cmake总结
查看>>
数据加密插件
查看>>
linux后台运行程序
查看>>
win7 vs2012/2013 编译boost 1.55
查看>>
IIS7如何显示详细错误信息
查看>>
ViewPager切换动画PageTransformer使用
查看>>
coco2d-x 基于视口的地图设计
查看>>
C++文件读写详解(ofstream,ifstream,fstream)
查看>>
Android打包常见错误之Export aborted because fatal lint errors were found
查看>>
Tar打包、压缩与解压缩到指定目录的方法
查看>>
新手如何学习 jQuery?
查看>>
配置spring上下文
查看>>