创建从基类继承的对象

Create object that inherits from base-class

本文关键字:对象 继承 基类 创建      更新时间:2023-10-16

也许这是一个初学者的问题,但我需要一些有关此问题的帮助。

假设有一个从B类继承的类A本身从类c。

继承

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

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

接下来我尝试了此操作,但失败了:

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

为什么我不能忽略这里B的继承 - 还是有一种方法可以使这一行为成为可能?定义A如下不起作用,这里编译器抱怨C已经是A:

的基类。
class A : B, C

为什么我不能从这里忽略bentacne-或者有一种方法可以使它成为可能?

因为类只能决定如何构建其 Direct subobject。A的直接子对象是B,而B的直接子对象为CB对象也需要构造,您无法绕过它。

您遇到的错误,基本上是对此抱怨的。

定义A如下无效,这里编译器抱怨C是A:class A : B,C

with:

class A : B, C

您实际上是在声明私有多重继承。而且,由于您说B已经有一个subobject(来自)C,因此编译器抱怨说,A中从C继承是没有用的。

但请记住,请始终指定private/protected/public的继承,以免混淆。默认情况下,class ES的继承为privatestruct S为public。因此,以上代码对应于:

class A : private B, private C

您应该写:

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) { ... }
};

真的没有其他方法....