首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >默认构造函数和虚拟继承

默认构造函数和虚拟继承
EN

Stack Overflow用户
提问于 2010-08-20 00:39:31
回答 3查看 5.4K关注 0票数 18

对于没有提供默认构造函数的类,有可能有虚拟继承吗?

目前的菱形图(最简单的一个,唯一的变化是没有提供默认构造函数)不能编译(g++ 4.4.3)。

代码语言:javascript
复制
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) {}
};

谢谢,弗朗西斯科

EN

回答 3

Stack Overflow用户

发布于 2010-08-20 00:43:59

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

票数 3
EN

Stack Overflow用户

发布于 2011-03-26 04:42:07

Dobbs博士的文章Multiple Inheritance Considered Useful解释了处理这一问题的各种方法。这个建议基本上是提供默认的构造函数和init()方法。它为B和C增加了更多的工作,但防止了D必须了解A。

票数 1
EN

Stack Overflow用户

发布于 2013-08-06 17:48:04

您需要显式调用A的构造,如下所示:

代码语言:javascript
复制
D(int i) : A(i), B(i), C(i) {}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3524019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档