在C ++中,如果一个类没有默认构造函数,为什么必须使用构造函数初始值设定项?

时间:2018-03-29 16:05:05

标签: c++ default-constructor

我在某处读到如果我在另一个类(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);

1 个答案:

答案 0 :(得分:4)

子类的构造函数将始终调用其中一个超类的构造函数。如果您没有明确说明应该调用哪一个,那么将调用默认构造函数。如果超类没有默认构造函数,那么这是不可能的,因此代码不会编译。

  

为什么必须在此类中使用构造函数初始值设定项?

因为没有默认构造函数,编译器没有可以隐式调用的超类构造函数(非默认构造函数需要参数,编译器只能组成要使用的参数)。 / p>

  

如果这样做会有任何性能提升吗?

代码将编译。如果你不这样做,那就不会。