我在某处读到如果我在另一个类(B)中有一个基类(A)成员,如果A没有默认构造函数,则必须使用构造函数初始值设定项。
为什么必须在此类中使用构造函数初始值设定项?如果这样做会有改进吗?
#include <iostream>
using namespace std;
class A {
int i;
public:
A(int );
};
A::A(int arg) {
i = arg;
cout << "A's Constructor called: Value of i: " << i << endl;
}
// Class B is derived from A
class B: A {
public:
B(int );
};
B::B(int x):A(x) { //Initializer list must be used
cout << "B's Constructor called";
}
int main() {
B obj(10);
答案 0 :(得分:4)
子类的构造函数将始终调用其中一个超类的构造函数。如果您没有明确说明应该调用哪一个,那么将调用默认构造函数。如果超类没有默认构造函数,那么这是不可能的,因此代码不会编译。
为什么必须在此类中使用构造函数初始值设定项?
因为没有默认构造函数,编译器没有可以隐式调用的超类构造函数(非默认构造函数需要参数,编译器只能组成要使用的参数)。 / p>
如果这样做会有任何性能提升吗?
代码将编译。如果你不这样做,那就不会。