经过一些计算后在 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)) {}
我希望能够在使用派生的 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)) {}