对于没有提供默认构造函数的类,有可能有虚拟继承吗?
目前的菱形图(最简单的一个,唯一的变化是没有提供默认构造函数)不能编译(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) {}
};
谢谢,弗朗西斯科
发布于 2010-08-20 00:43:59
我相信您的类D
还需要在其初始化器列表中显式调用A
的构造函数。
发布于 2011-03-26 04:42:07
Dobbs博士的文章Multiple Inheritance Considered Useful解释了处理这一问题的各种方法。这个建议基本上是提供默认的构造函数和init()
方法。它为B和C增加了更多的工作,但防止了D必须了解A。
发布于 2013-08-06 17:48:04
您需要显式调用A的构造,如下所示:
D(int i) : A(i), B(i), C(i) {}
https://stackoverflow.com/questions/3524019
复制相似问题