请考虑以下内容:
# 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
的默认构造函数可以解决此问题。
在我看来,如果我想从一个类继承,那么需要有一个默认的构造函数?即使(在此示例中)它从未被调用?这是正确的吗?如果正确,为什么?否则,上面的代码有什么问题?
答案 0 :(得分:2)
不,那不是正确的假设。
您只是有一个错误。您的派生类构造函数必须调用您提供的唯一的基础构造函数,后者是一个参数构造函数。
Child(int a)
: Base(a)
{
cout << "Child" << endl;
}