派生类中的默认构造函数是可选的吗?

时间:2017-03-17 04:53:54

标签: c++

我很困惑,默认构造函数在派生类中是可选的或必需的。 好吧,没有在派生类中使用默认构造函数,我得到输出。

enter image description here

2 个答案:

答案 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;
}

它工作正常。