经过一些计算后在 base class 之后调用参数化构造函数

Call parameterised constructor after base class after some calculation

我希望能够在使用派生的 class 构造函数的输入参数进行一些计算后调用基础 class 的参数化构造函数。

据我所知,当您调用派生 class 的构造函数时,会调用基 class 的默认构造函数...

(除非它的参数化构造函数被特别调用:)

DerivedClass(int a,int b) : BaseClass(a,b) {} 

有没有办法做类似的事情:

DerivedClass(int a,int b) { 
   a += 2; 
   b += 5; 
   BaseClass(a, b); // <- this line I am questioning :(
}

而且我假设上面的内容不起作用,因为 BaseClass 的默认构造函数已经被调用..

不,您不能推迟在派生构造函数中调用基类构造函数。调用构造函数的唯一方法是通过构造函数初始化列表,它在构造函数主体之前执行。否则,您可能会看到很多噩梦般的代码,其中对象的基础部分尚未构建,但派生部分已经尝试初始化自身...

在你的情况下,你可以这样做

DerivedClass(int a,int b) : BaseClass(a + 2, b + 2) {} 

PS: 你的代码有错误,当你调用 BaseClass 时你不应该使用 BaseClass(int a, int b),而应该只使用 BaseClass(a, b),因为它是函数调用而不是声明。

您不能推迟基本构造函数,但您可以使用函数。

例如:

DerivedClass(int a, int b) : BaseClass(adjust_a(a), adjust_b(b)) {}