是否可以覆盖基类构造函数?

时间:2020-04-28 17:26:11

标签: c++ constructor overriding

我刚刚阅读了Code Complete 2nd Edition,其中有一段提到了重写构造函数。

作者举了一个代码调优示例。

程序使用的子类继承自第三方编写的父类。

他们发现在父类构造函数中无需进行初始化(在他们的用例中)即可将字段设置为系统时间。

作者重写父类构造函数,并将文件初始化为0而不是系统时间,以减少系统级调用。

我的问题是,我们如何覆盖构造函数?我一直认为创建子对象时不可避免地要调用父类构造函数。

1 个答案:

答案 0 :(得分:2)

否,您不能在C ++中做到这一点。

我没有您要指的文字,但如果确实如此,那是错误的。

派生类构造函数可以添加进一步的构造活动,并且可以选择要调用的基本构造函数,但是它不能阻止该基本类构造函数执行其最初设计的工作,也不能它完全避免了任何基类构造函数的调用。

不过,在其他一些语言中也有可能。例如,在Python中,默认情况下,派生构造函数不会调用基本构造函数,因此you have full control over both whether and how such a thing occurs可以说是“覆盖”。是否导致“良好”的程序设计尚有争议。

相关问题