C++中,子类对象创建需要预先创建父类对象,对象销毁顺序与此相反。假如父类构造函数只存在有参构造,在子类对象实例化之前,便需要创建一个父类对象,在不存在默认无参构造情况下,系统时不知道怎么为你创建父类对象的。
解决上述问题的办法,就是在子类创建时指定父类初始化方式,需要在子类的有参构造中使用冒号“:”。用一个例子说明:
先看一般情况:父类和子类同时存在无参构造和有参构造函数。
输出信息如下,说明子类Son创建之前,先利用父类Father的无参构造创建了一个对象。
修改一下子类的有参构造函数:
输出信息如下,这说明子类Son创建之前,先利用父类Father的有参构造创建了一个父类对象。
再来看只存在有参构造的场景,删除父类Father和子类Son的无参构造,还原Son的有参构造函数为初始状态:
直接报错,提示子类Son实例化必须初始化父类Father,父类只存在有参构造的情况下,系统不知道怎么为你创建一个父类,因此提示你指定父类的创建方式。利用冒号可以初始化父类对象,从而解决了这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)