请参见以下C ++代码: #include

问题描述 投票:0回答:1
我的问题是...是否有任何方法可以修改类伽玛类的构造函数,即

gamma (float b, float d): beta (b) { c = d; }

因此,我可以使用一个构造函数(以及多级继承中的所有类)来初始化所有三个类alpha,beta和伽玛?
我尝试了

gamma (int a, float b, float d): alpha (a), beta (b) { c = d; }

但我得到错误
:键入“ alpha”不是“伽马”

的直接基础 我尝试了几本书和一些在线资源,但无法得到答案。 谢谢大家。

错误消息在现场。 

gamma仅初始化其直接基类对象,然后必须初始化其基类对象。 考虑基础类对象是按顺序初始化的。当调用

gamma
c++ inheritance constructor
1个回答
0
投票
beta

子对象。其中的一部分是构建类型

beta
的子对象。只有在此之后,

alpha

构造了

beta
子对象,其余的
gamma
才能转弯。那时,
alpha
对象已经开始初始化,您无法再对其进行初始化。 正如评论中提到的那样,正确的方法是将wisterter更改为:
beta
(也将成员初始化器用于数据成员!)
因此
beta (float c) : alpha(c), b(c) {}
构造器可以是

gamma

我实际上并没有费心理解应该使用哪个参数来用于哪个成员,但我想您明白了。

对于我来说,我应该提到虚拟基类,因为它们是我上面写的一个例外。虚拟基类对象必须由最派生的类初始化。但是,这只是虚拟继承方式的副作用。在您的示例中使用虚拟继承只能让Intialize直接向后。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.