派生类的构造和析构函数

原创 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++ 派生类的构造和析构函数

派生类的目的是为了发展,派生类继承了积累的成员,实现了原有代码的重用,这只是一部分,而代码的扩充才是最主要的,只有通过添加新的成员,加入新的功能,类的派生才有实际意义。 派生类的构造函数只负责对...

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

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

C++ 派生类构造函数、析构函数调用 [大三TJB_708]

《C++面向对象程序设计》第二版 杜茂康 李昌兵   1 派生类构造函数、析构函数描述 作用和形式 派生类可能有多个基类,也可能包括多个对象成员(指本类中的数据成员,此数据成员为某类定义的对象)。在创...

C++基础:派生类的构造函数与析构函数调用顺序

派生类的构造函数与析构函数调用顺序: 派生类的构造函数的定义形式为: 派生类名::派生类名(参数总表):基类名1(参数表1),基类名2(参数表2),成员对象名1(成员对象参数表1),成员对象名2(...
  • wjxxaut
  • wjxxaut
  • 2016年07月20日 22:34
  • 151

派生类的构造函数赋值和析构函数执行顺序

派生类的构造函数赋值和析构函数执行顺序 基类的构造函数和析构函数是不能被继承的 1、如果基类没有定义构造函数,派生类也可以不定义构造函数,使用默认的构造函数,其新增成员的初始化可以用其他公...
  • taoqick
  • taoqick
  • 2014年03月29日 16:34
  • 827

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

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

继承的三种方式与派生类的构造函数和析构函数~

一:继承的三种方式 形式: class 派生类名:继承方式  基类名,继承方式  基类名,继承方式  基类名····· ①公有继承(public 类名) 1.在派生类中基类的公有成员和受保护的成员...

第十五讲:派生类的构造函数和析构函数

第十五讲:派生类的构造函数和析构函数     * 理解:派生的构造函和析构函数     重点、难点:有子对象的派生类的构造函数;多重派生时的构造函数。  问题的思路是:在执行派生类的构造函数时,...
  • L_cpp
  • L_cpp
  • 2016年09月08日 14:14
  • 165
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:派生类的构造和析构函数
举报原因:
原因补充:

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