C++学习笔记:子类构造函数中冒号的使用 — 同时创建父类和子类对象

C++中,子类对象创建需要预先创建父类对象,对象销毁顺序与此相反。假如父类构造函数只存在有参构造,在子类对象实例化之前,便需要创建一个父类对象,在不存在默认无参构造情况下,系统时不知道怎么为你创建父类对象的。

解决上述问题的办法,就是在子类创建时指定父类初始化方式,需要在子类的有参构造中使用冒号“:”。用一个例子说明:

先看一般情况:父类和子类同时存在无参构造和有参构造函数。

C++学习笔记:子类构造函数中冒号的使用 — 同时创建父类和子类对象

输出信息如下,说明子类Son创建之前,先利用父类Father的无参构造创建了一个对象。

C++学习笔记:子类构造函数中冒号的使用 — 同时创建父类和子类对象

修改一下子类的有参构造函数:

C++学习笔记:子类构造函数中冒号的使用 — 同时创建父类和子类对象

输出信息如下,这说明子类Son创建之前,先利用父类Father的有参构造创建了一个父类对象。

C++学习笔记:子类构造函数中冒号的使用 — 同时创建父类和子类对象

再来看只存在有参构造的场景,删除父类Father和子类Son的无参构造,还原Son的有参构造函数为初始状态:

C++学习笔记:子类构造函数中冒号的使用 — 同时创建父类和子类对象

直接报错,提示子类Son实例化必须初始化父类Father,父类只存在有参构造的情况下,系统不知道怎么为你创建一个父类,因此提示你指定父类的创建方式。利用冒号可以初始化父类对象,从而解决了这个问题。