在计算后,在基类之后调用参数化构造函数

Call parameterised constructor after base class after some calculation

本文关键字:参数 构造函数 调用 基类 计算 之后      更新时间:2023-10-16

我希望能够使用来自派生类构造函数的输入参数进行一些计算后,可以调用基类的参数化构造函数。

对我所相信的,当您称为派生类的构造函数时,基类的默认构造函数称为...

(除非其参数化的构造函数被特别称为:)

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的默认构造函数已经被称为..

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

在您的情况下,您可以做

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

ps:您的代码中有一个错误,当您调用BaseClass时,您不应该使用BaseClass(int a, int b),而应仅使用BaseClass(a, b),因为它是函数调用,而不是声明。

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

例如:

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