基类的构造函数和析构函数不能被继承,基类成员的初始化只能在基类的构造函数中进行。
派生类的数据成员包括基类的数据成员和派生类自身新增的数据成员。
1. 当创建一个派生类对象时,派生类的构造函数必须首先通过调用基类的构造函数来对基类的数据成员进行初始化,然后再执行派生类构造函数的函数体,对派生类新增的数据成员进行初始化。当派生类对象的生存期结束时,析构函数的调用顺序相反。
2. 派生类构造函数调用基类构造函数
隐式调用:不指定基类的构造函数,默认调用基类默认构造函数(不带参数或者带默认参数值的构造函数)
显式调用:指定调用基类的某个构造函数。除非基类有默认构造函数,否则都要用显示调用。
<派生类名>::<派生类名>(<形参声明>) : <基类名>(<参数表>)
{
<派生类构造函数的函数体>
}
基类有多个构造函数的话,编译器根据参数表来确定调用哪个
如果派生类没有定义构造函数,编译器会自动生成一个派生类默认构造函数,而且调用的是基类的默认构造函数。
所以说,如果基类没有定义构造函数,派生类可以不定义构造函数,或者不显示指定基类构造函数。否则,如果基类定义了带有形参表的构造函数(属于自定义构造函数而非默认构造函数),派生类就必须采取显式定义方式定义构造函数。
简而言之,如果基类有默认构造函数(包括两种情况:1.不带形参表的构造函数;2. 带形参表,但是形参都有缺省值&#