我很困惑,默认构造函数在派生类中是可选的或必需的。 好吧,没有在派生类中使用默认构造函数,我得到输出。
答案 0 :(得分:1)
任何类,不仅是派生的,都可以有默认的ctor。即使在C ++ 98的好日子里也是如此:
struct Base {
Base(int) {}
};
struct Derived: Base {
Derived(int x): Base(x) {}
};
因此,Derived d;
无法编译。
答案 1 :(得分:0)
来自C ++书:
如果基类构造函数具有默认参数,那么这些参数是 没有继承。相反,派生类获得多个继承 构造函数,其中每个参数都带有默认参数 先后省略了。
当您声明任何其他构造函数时,编译器将删除默认构造函数。
第一种情况:
#include <iostream>
using namespace std;
class A
{
public:
A(){}
A(int i){}
};
class B: public A
{
public:
B(int i):A(i){}
};
int main()
{
B b;
}
当你编译程序时,编译器会出错:
error: no matching function for call to ‘B::B()’
B b;
在第二种情况下:
#include <iostream>
using namespace std;
class A
{
public:
A(){}
A(int i){}
};
class B: public A
{
public:
B(){}
B(int i):A(i){}
};
int main()
{
B b;
}
它工作正常。