调用派生类的构造函数时,可能会调用继承自基类的函数,也就可能会用到基类的数据成员,因此,调用派生类的构造函数时,必须确保继承自基类的数据成员已构造完毕,而将基类构造函数的调用写在初始化列表中,能确保做到这一点。
要注意两点:
如果基类不存在默认构造函数,则派生类在进行构造函数的时候,必须将基类的构造函数写在初始化列表中,否则编译不会通过。也就是说,在派生类进入构造函数之中以后,基类的构造函数必须已经是完成的了。
若基类没有构造函数或仅存在无参构造函数,则在派生类构造函数的定义中可以省略对基类构造函数的调用,因为派生类的构造函数在初始化列表中自动调用了默认无参构造函数或者你自己手写的无参构造函数。