派生类的构造函数

转载 2013年12月04日 14:13:22
 
派生类的数据成员由所有基类的数据成员与派生类新增的数据成员共同组成,如果派生类新增成员中包括其他类的对象(子对象),派生类的数据成员中实际上还间接包括了这些对象的数据成员。因此,构造派生类的对象时,必须对基类数据成员、新增数据成员和成员对象的数据成员进行初始化。派生类的构造函数必须要以合适的初值作为参数,隐含调用基类和新增对象成员的构造函数,来初始化它们各自的数据成员,然后再加入新的语句对新增普通数据成员进行初始化。
派生类构造函数的一般格式如下:
<派生类名>::<派生类名>(<参数表>) : <基类名1>(<参数表1>),
……,
<基类名n>(<参数表n>),
<子对象名1>(<参数表n+1>),
……,
<子对象名m>(<参数表n+m>)
{
<派生类构造函数体> //派生类新增成员的初始化
}
说明:
(1) 对基类成员和子对象成员的初始化必须在成员初始化列表中进行,新增成员的初始化既可以在成员初始化列表中进行,也可以在构造函数体中进行。
(2) 派生类构造函数必须对这三类成员进行初始化,其执行顺序如下所述。
. 调用基类构造函数;
. 调用子对象的构造函数;
. 派生类的构造函数体;
(3) 当派生类有多个基类时,处于同一层次的各个基类的构造函数的调用顺序取决于定义派生类时声明的顺序(自左向右),而与在派生类构造函数的成员初始化列表中给出的顺序无关。
(4) 如果派生类的基类也是一个派生类,则每个派生类只需负责其直接基类的构造,依次上溯。
(5) 当派生类中有多个子对象时,各个子对象构造函数的调用顺序也取决于在派生类中定义的顺序(自前至后),而与在派生类构造函数的成员初始化列表中给出的顺序无关。
(6) 派生类构造函数提供了将参数传递给基类构造函数的途径,以保证在基类进行初始化时能够获得必要的数据。因此,如果基类的构造函数定义了一个或多个参数时,派生类必须定义构造函数。
(7) 如果基类中定义了缺省构造函数或根本没有定义任何一个构造函数(此时,由编译器自动生成缺省构造函数)时,在派生类构造函数的定义中可以省略对基类构造函数的调用,即省略"<基类名>(<参数表>)"。
(8) 子对象的情况与基类相同。
(9) 当所有的基类和子对象的构造函数都可以省略时,可以省略派生类构造函数的成员初始化列表。
(10) 如果所有的基类和子对象构造函数都不需要参数,派生类也不需要参数时,派生类构造函数可以不定义。

关于派生类构造函数与基类构造函数的调用顺序问题

《面向对象程序设计基础(第二版》李师贤等,第254页:C++语言的基本规则是:创建一个派生类的对象时,如果基类带有构造函数,则先调用基类的构造函数,然后才调用派生类的构造函数。   《Thinkin...
  • a2796749
  • a2796749
  • 2015年05月21日 00:05
  • 1259

【C++】基类和派生类构造函数的调用顺序

首先说说构造函数,大家都知道构造函数里就可以调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就可以调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数,...
  • michellechouu
  • michellechouu
  • 2014年06月15日 18:00
  • 1811

关于基类和派生类的构造函数和析构函数的执行顺序问题

C++ 派生类的析构函数的调用顺序为: A)  基类、派生类和对象成员类的析构函数  B)  派生类、对象成员类和基类的析构函数  C)  对象成员类、派生类和基类的析构函数     D)  ...
  • dyx810601
  • dyx810601
  • 2016年08月02日 20:53
  • 3541

构造函数和析构函数在派生类中执行顺序须知

  • 2013年10月21日 09:29
  • 33KB
  • 下载

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

  • 2011年11月30日 14:24
  • 14KB
  • 下载

派生类的构造函数的初始化列表问题

一、派生类不能在成员初始化列表中直接初始化基类的成员 初始化基类成员 构造函数是不可继承的。因此,派生类的构造函数必须通过调用基类的构造函数初始化基类成员,不能够在派生类初始化列表直接初始化基类的...
  • libaineu2004
  • libaineu2004
  • 2014年02月20日 17:47
  • 7162

5-2 派生类的构造函数

5-2 派生类的构造函数 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description ...
  • slyslyme
  • slyslyme
  • 2017年12月21日 21:59
  • 139

5-2 派生类的构造函数

5-2 派生类的构造函数 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description...
  • jinzk123
  • jinzk123
  • 2016年11月24日 09:27
  • 155

c++ 单继承派生类的构造函数

1、派生类的构造函数:    #include #includestring> using namespace std; class Student//声明基类Student {...
  • lbdreaming
  • lbdreaming
  • 2014年02月26日 17:04
  • 501

派生类的构造函数的初始化列表问题

一、派生类不能在成员初始化列表中直接初始化基类的成员 初始化基类成员 构造函数是不可继承的。因此,派生类的构造函数必须通过调用基类的构造函数初始化基类成员,不能够在派生类初始化列表直接...
  • imxiangzi
  • imxiangzi
  • 2015年08月18日 00:45
  • 372
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:派生类的构造函数
举报原因:
原因补充:

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