创建从基类继承的对象

时间:2014-01-27 07:00:58

标签: c++ inheritance multiple-instances

这可能是一个初学者的问题,但我需要一些关于这个问题的帮助。

假设有一个继承自B类的A类,它本身继承自C类。

现在当A类构造函数看起来像这样时,一切都很好:

A::A(params)
  :B(params)
{
}

接下来我尝试了这个,但它失败了:

A::A(params)
  :C(params)
{
}

为什么我不能忽略B中的继承 - 或者有没有办法使这成为可能?如下定义A不起作用,这里编译器抱怨C已经是A:

的基类
class A : B, C

2 个答案:

答案 0 :(得分:0)

你应该写:

class C
{
public: C(ParamType param) { ... }
};

class B : public C
{
public: B(ParamType param) : C(param) { ... }
};

class A : public B
{
public: A(ParamType param) : B(param) { ... }
};

真的没有别的办法......

答案 1 :(得分:0)

  

为什么我不能在这里忽略B中的遗传物 - 或者有没有办法使这成为可能?

因为类只能决定如何构建 direct 子对象。 A的直接子对象为BB的直接子对象为CB对象也需要构建,你不能绕过它。

你得到的error,基本上都抱怨这个。

  

如下定义A不起作用,这里编译器抱怨C已经是A的基类:class A : B,C

使用:

class A : B, C

您实际上声明了私有多重继承。既然你说B已经有一个子对象(继承自)C,那么编译器抱怨从C继承A是没用的。

但请记住始终指定private / protected / public类型的继承,以避免混淆。默认情况下,class es的继承为private,而struct的继承为public。所以上面的代码对应于:

class A : private B, private C