在双重继承的情况下如何处理非标准的构造函数

时间:2018-09-29 01:16:29

标签: c++ inheritance constructor polymorphism base-class

我想从两个类CA继承一个类B,其中一个(B)具有一个非标准的构造函数。 C的构造函数应如何与两个基类之一兼容? 我有一个小例子来说明我的问题,它看起来像这样:

class A {
    public:
    A(){}
    ~A(){}
};

class B {
    public:
    B(int abc,
      int def,
      int ghj){}
      ~B(){}
};

class C:public B, public A {
    public:
    C(int test,
      int test2,
      int test3){}
    ~C(){}
};

int main(void) {
    C* ptr = new C (123,456,789);
}

哪里出现以下编译器错误:

main.cpp: In constructor 'C::C(int, int, int)':
main.cpp:19:17: error: no matching function for call to 'B::B()'
       int test3){}

1 个答案:

答案 0 :(得分:2)

鉴于C的构造函数的当前实现,B(和A)的基本子对象将被默认初始化,但是类B不会被初始化具有默认构造函数,这会导致错误。

您可以通过适当的B构造函数应用member initializer list来初始化B基础子对象。例如

class C:public B, public A {
    public:
    C(int test,
      int test2,
      int test3) : B(test, test2, test3) {}
//               ^^^^^^^^^^^^^^^^^^^^^^^
    ~C(){}
};