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

半腔热情 提交于 2020-01-28 02:21:58

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

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

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

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

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

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

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!