我希望能够在使用派生类构造函数的输入参数完成一些计算之后调用基类的参数化构造函数。
据我所知,当你调用派生类的构造函数时,会调用基类的默认构造函数...
(除非其参数化构造函数具体如此调用:)
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
的默认构造函数已被调用..
答案 0 :(得分:2)
不,您不能推迟在派生构造函数中调用基础构造函数。调用构造函数的唯一方法是通过构造函数初始化列表,该列表在构造函数的主体之前执行。如果不是这样,你可能会看到许多噩梦代码,其中一个对象的基础部分尚未构建,但派生部分正在尝试初始化自己...
在你的情况下,你可以做到
DerivedClass(int a,int b) : BaseClass(a + 2, b + 2) {}
PS:您的代码出现错误,当您致电BaseClass
时,您不应该使用BaseClass(int a, int b)
,而只能使用BaseClass(a, b)
,因为这是一个函数调用,不是宣言。
答案 1 :(得分:0)
您不能推迟基本构造函数,但可以使用函数。
例如:
DerivedClass(int a, int b) : BaseClass(adjust_a(a), adjust_b(b)) {}