可能有类的虚拟继承不提供默认构造函数?默认的构造函数和虚拟继承
目前的菱形图(最简单的一个,没有提供默认的构造函数)没有编译(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) {}
};
感谢, 弗朗切斯科
离开d不知道A的,当然,理想的。在“的init()”的解决方案,不幸的是,有一个缺点:A的构造将被调用两次(一次由每个B和C)可具有副作用(特别是如果使用静态成员)。另外,如果开发人员创建'class D:public A {}',则可能根本不会调用'init()'方法,使对象保持未初始化状态。 – Marste 2015-08-12 13:05:59