派生类的构造和析构函数

原创 2016年06月01日 22:49:25

因为派生类不继承基类的构造和析构函数,为了对派生类新增的成员初始化,或扫尾、清理,需要加入构造和析构函数。

一、构造函数
派生类成员对象有所有基类的成员对象与派生类新增成员对象组成,在构造派生类的对象时,要对其所有成员对象初始化。

为了完成这些工作必须添加新的构造函数,对新增加成员对象初始化,并通过调用基类构造函数,完成对不能直接访问的基类成员对象初始化。

syntax:

派生类名::派生类名(参数表):基类名1(基类1初始化参数表),…,基类名n(基类n初始化参数表),成员对象名1(成员对象1初始化参数表),…,成员对象名m(成员对象m初始化参数表)
{
派生类构造函数其他操作;
}

参数表:给出初始化基类数据和新增加成员对象所需数据。

基类名1~n:
需要基于参数初始化(构造函数带有形参表)的基类(对于使用默认构造函数的基类,可以不给出类名)

派生类构造函数执行次序
1)调用基类构造函数,顺序按照继承时声明顺序(from left to right);
2)对派生类新增成员对象初始化,按照类中声明顺序;
3)执行Function body。

二、复制构造函数
类似于构造函数,基类的复制构造函数也是不能被派生类继承的

if不使用默认构造函数,则要为派生类编写复制构造函数,这个函数还要为基类相应的复制构造函数传递参数。

syntax:
DerivedClassName : : DerivedClassName (DerivedClassName &v) : BaseClassName(v) ,…, { … }

虽然v为派生类对象的引用,但根据类型兼容机制,依然可以用派生类的对象去初始化基类的引用。

三、析构函数
因派生类是不会继承基类的析构函数的,那为了对派生类新增的非对象成员清理,必须编写派生类的析构函数,需要注意的是析构函数只要负责把派生类新增的非对象成员清理就好了,系统会调用基类的析构函数清理从基类继承而来的成员。

清理工作顺序:
1)执行派生类机构函数体;
2)清理派生类成员新增成员;
3)调用基类析构函数,清理从基类继承而来的成员,清理顺序与被继承时声明时的顺序相反。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++语言笔记系列之十五——派生类、基类、子对象的构造和析构函数调用关系

例子 example 1 注:若一个基类同时派生出两个派生类,即两个派生类从同一个基类继承,那么系统将为每一个简历副本,每个派生类独立地使用自己的基类副本(比如基类中有属于自己类的静态变量等)。 #i...

派生类的构造函数与析构函数

派生类的构造函数与析构函数: 派生类不能继承基类的构造函数和析构函数,必须自己定义。由于派生类与基类的特殊关系,在设计派生类的构造函数时,不仅要考虑派生类新增数据成员的初始化, 也要考虑基类数据成...

C++派生类的构造函数和析构函数

派生类不仅继承了基类的成员,还添加了新的成员进行了功能的扩充。因此在建立派生类的实例对象时,不仅要初始化派生类对象的基类成员,还要对派生类的新增成员进行初始化。但由于基类的构造函数和析构函数不能被继承...

C++派生类的构造函数和析构函数

如果需要对派生类新增的初始成员进行初始化,就必须对派生类添加新的构造函数。由于基类的构造函数和析构函数不能继承,因此,对继承类基类原有的数据成员的初始化,必须调用基类的构造函数来完成。 在定义派生类...

C++派生类构造函数和析构函数调用顺序

++派生类构造函数调用顺序(详解) 我们来看下面一段代码:   class B1   {   public:   B1(int i) {cout   };   class B2   {...

面向对象的程序设计-学习笔记-23-派生类的构造函数和析构函数

/*派生类的构造函数和析构函数 */ #include using namespace std; class base { float x,y; public: base(float ...

【一天一篇CPP】派生类的构造函数和析构函数

1.基类的构造函数是不能继承的,在声明派生类时,派生类并没有把基类的构造函数继承过来,但是可以通过一种显式的声明来调用基类的构造函数。 对于析构函数,系统会自动调用基类的析构函数,详细看下面的 “3注...

读书笔记--C++程序设计(第2版)--11.5派生类的构造函数和析构函数

派生类的构造函数和析构函数 1. 由来:因为派生类对基类的继承过程,不能继承构造函数,所以派生类的构造函数还得有派生类自己设置。      派生类构造函数的设置思想是:调用基类的构造函数,来完成派生类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)