超类是否需要默认的构造函数?

时间:2019-05-13 13:58:01

标签: c++ oop inheritance constructor

请考虑以下内容:

# include <iostream>

using namespace std;

class Base{
    public:
        Base(int a) {
            cout << "Base" << endl;
        }
};

class Child: public Base{
    public:
        Child(int a) {
            cout << "Child" << endl;
        }
};

int main() {
    Child c = Child(0);
}

编译时会给出错误no matching function for call to ‘Base::Base()’。明确声明Base的默认构造函数可以解决此问题。

在我看来,如果我想从一个类继承,那么需要有一个默认的构造函数?即使(在此示例中)它从未被调用?这是正确的吗?如果正确,为什么?否则,上面的代码有什么问题?

1 个答案:

答案 0 :(得分:2)

不,那不是正确的假设。

您只是有一个错误。您的派生类构造函数必须调用您提供的唯一的基础构造函数,后者是一个参数构造函数。

    Child(int a)
    : Base(a)
    {
        cout << "Child" << endl;
    }