首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++多重继承构造函数调用

c++多重继承构造函数调用
EN

Stack Overflow用户
提问于 2012-04-11 17:24:01
回答 2查看 120关注 0票数 0

在下面的代码行中,类A是基类,由类B和类C继承。此外,D中的构造函数调用B、C和A的构造函数。因为当B和C将A作为虚函数继承时,它们没有资格直接调用A的构造函数(因为对A的调用必须通过第三代)。

我的问题是,如果我想创建一个类B的对象,那么由于A是虚拟继承的,那么有没有办法调用A的构造函数(传递用于初始化的变量v1和v2 )?

代码语言:javascript
复制
class A {
   int a1,a2;
   A() {
   }

   A(int v1,v2) {
      a1 = v1;
      a2 = v2;
   }
};

class B:virtual public A {
   int b1,b2;
   B() {
   }

   B(int v1,v2) {
      b1 = v1;
      b2 = v2;
   }
};

class C:virtual public A {
   int c1,c2;
   C() {
   }

   C(int v1,v2) {
      c1 = v1;
      c2 = v2;
   }
};

class D:public B,public C {
   int d1,d2;
   D() {
   }

   D(int v1,v2):B(v1,v2),C(v1,v2),A(v1,v2)
   {
      d1 = v1;
      d2 = v2;
   }
};
EN

回答 2

Stack Overflow用户

发布于 2012-04-11 17:28:53

也可以为B提供一个用于A的初始化器。所有的虚拟继承意味着,如果你有一个派生得更多的对象,那么这个虚拟库就是由派生最多的对象构造的()。但如果您只构造B的一个实例,那么该实例就是派生程度最高的对象。所以只要这样写就行了:

代码语言:javascript
复制
 class B : public virtual A
 {
 public:
     B() : A(1, 2) {  }
     // ...
 };

只有当您从B派生时,基本初始化器才会被忽略。

票数 1
EN

Stack Overflow用户

发布于 2012-04-11 17:30:18

你能做的就是让类B和C从A正常继承(没有关键字‘constructor>’),但是让类D从B和C继承。这将允许你通过传递类A的值来创建类B(或C)的对象

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10103199

复制
相关文章

相似问题

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