默认构造函数和虚拟继承

fba*_*ile 16 c++

对于不提供默认构造函数的类,是否可以具有虚拟继承?

当前的菱形图(最简单的一个,没有提供默认构造函数的唯一更改)不编译(g ++ 4.4.3).

class A {
 public: 
  A(int ) {}
};
class B : virtual public A {
 public:
  B(int i) : A(i) {}
};
class C : virtual public A {
 public:
  C(int i) : A(i) {}
};
class D : public B, public C {
 public:
  D(int i) : B(i), C(i) {}
};
Run Code Online (Sandbox Code Playgroud)

谢谢,弗朗西斯科

Pra*_*rav 22

你需要在A这里显式调用构造函数

 D(int i) : A(i), B(i), C(i) {}
Run Code Online (Sandbox Code Playgroud)

虚基类是特殊的,因为它们由最派生的类初始化,而不是从虚拟基础继承的任何中间基类.初始化一个碱基的正确选择是哪个潜在的多个初始化器?

如果正在构造的派生类最多的类没有在其成员初始化列表中列出它,则使用其默认构造函数初始化虚拟基类,该构造函数必须存在且可访问.

这里无耻地复制:-)


Mar*_*k B 3

我相信您的类D还需要A在其初始值设定项列表中显式调用 的构造函数。