派生类的数据成员由所有基类的数据成员与派生类新增的数据成员共同组成,如果派生类新增成员中包括其他类的对象(子对象),派生类的数据成员中实际上还间接包括了这些对象的数据成员。因此,构造派生类的对象时,必须对基类数据成员、新增数据成员和成员对象的数据成员进行初始化。派生类的构造函数必须要以合适的初值作为参数,隐含调用基类和新增对象成员的构造函数,来初始化它们各自的数据成员,然后再加入新的语句对新增普通数据成员进行初始化。
派生类构造函数的一般格式如下:
<派生类名>::<派生类名>(<参数表>) : <基类名1>(<参数表1>),
……,
<基类名n>(<参数表n>),
<子对象名1>(<参数表n+1>),
……,
<子对象名m>(<参数表n+m>)
{
<派生类构造函数体> //派生类新增成员的初始化
}
说明:
(1) 对基类成员和子对象成员的初始化必须在成员初始化列表中进行,新增成员的初始化既可以在成员初始化列表中进行,也可以在构造函数体中进行。
(2) 派生类构造函数必须对这三类成员进行初始化,其执行顺序如下所述。
. 调用基类构造函数;
. 调用子对象的构造函数;
. 派生类的构造函数体;
(3) 当派生类有多个基类时,处于同一层次的各个基类的构造函数的调用顺序取决于定义派生类时声明的顺序(自左向右),而与在派生类构造函数的成员初始化列表中给出的顺序无关。
(4) 如果派生类的基类也是一个派生类,则每个派生类只需负责其直接基类的构造,依次上溯。
(5) 当派生类中有多个子对象时,各个子对象构造函数的调用顺序也取决于在派生类中定义的顺序(自前至后),而与在派生类构造函数的成员初始化列表中给出的顺序无关。
(6) 派生类构造函数提供了将参数传递给基类构造函数的途径,以保证在基类进行初始化时能够获得必要的数据。因此,如果基类的构造函数定义了一个或多个参数时,派生类必须定义构造函数。
(7) 如果基类中定义了缺省构造函数或根本没有定义任何一个构造函数(此时,由编译器自动生成缺省构造函数)时,在派生类构造函数的定义中可以省略对基类构造函数的调用,即省略"<基类名>(<参数表>)"。
(8) 子对象的情况与基类相同。
(9) 当所有的基类和子对象的构造函数都可以省略时,可以省略派生类构造函数的成员初始化列表。
(10) 如果所有的基类和子对象构造函数都不需要参数,派生类也不需要参数时,派生类构造函数可以不定义。
分享到:
相关推荐
派生类构造函数和析构函数的执行顺序
C++\测试 对象成员构造函数、基类构造函数、派生类本身的构造函数 的先后顺序.rar
《Visual C++2012入门经典(第6版)》实例,在派生类的构造函数中调用基类的构造函数
c++派生类继承构造函数方法!!!!!!!!!!!
C++有子对象的派生类的构造函数,练习C++基础
C++派生类的构造函数,在初始化对象时,对数据的初始化操作,初学者练习。
详细介绍了继承类的构造函数,基类的构造函数是不能继承的,在声明派生类时,派生类并没有把基类的构造函数继承过来,因此,对继承过来的基类成员初始化的工作也要由派生类的构造函数承担。
举例说明构造函数的调用过程,定义类及其派生类,构造函数对类成员初始化
派生类的数据成员由所有基类的数据成员与派生类新增的数据成员共同组成,如果派生类新增成员中包括其他类的对象(子对象),派生类的数据成员中实际上还间接包括了这些对象的数据成员。
说明了派生类与基类之间的构造函数的调用顺序……
在上面叙述的基础上,不难写出在多级派生情况下派生类的构造函数。 通过例下面的程序,读者可以了解在多级派生情况下怎样定义派生类的构造函数。相信大家完全可以自己看懂这个程序。 [例] 多级派生情况下派生类的...
在上面叙述的基础上,不难写出在多级派生情况下派生类的构造函数。 通过例下面的程序,读者可以了解在多级派生情况下怎样定义派生类的构造函数。相信大家完全可以自己看懂这个程序。 [例] 多级派生情况下派生类的...
基类的构造函数不能被继承,在声明派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数来完成。所以在设计派生类的构造函数时,不仅要考虑派生类新增的成员变量,还要考虑基类的成员变量,要让它们都...
含有虚基类的派生类的构造函数有什么要求,什么是最远派生类,建立一个含有虚基类的派生类的对象时,为什么由最远派生类的构造函数负责虚基类的初始化?继承与组合之间的区别与联系是什么?派生类的构造函数是怎样的...
C++ defaul construct :缺省构造函数(默认构造函数) ... 我们通常说的派生类和基类,我们调用派生类的自定义的构造函数的时候,派生类会自动调用基类中的default construct函数,而不能调用基类中的其他构造函
构造函数和析构函数在派生类中执行顺序须知
主要介绍了C#中派生类调用基类构造函数用法,实例分析了派生类调用基类构造函数的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
定义基类person,数据成员name,sex,age,构造函数,析构函数,输出...②定义公有派生类student,数据成员:num,构造函数,析构函数,输出name,sex,age,num的函数display()。③ 主函数定义并使用student 对象stu。
C++构造函数,拷贝构造函数,虚函数,派生类
构造函数 先看看构造函数的...派生类构造函数。 析构函数 析构函数的调用顺序与构造函数的调用顺序正好相反,将上面3个点反过来用可以了,首先调用派生类的析构函数;其次再调用成员类对象的析构函数;后调