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
beta
子对象。其中的一部分是构建类型
beta
的子对象。只有在此之后,alpha
构造了
beta
子对象,其余的gamma
才能转弯。那时,alpha
对象已经开始初始化,您无法再对其进行初始化。
正如评论中提到的那样,正确的方法是将wisterter更改为:beta
(也将成员初始化器用于数据成员!)因此beta (float c) : alpha(c), b(c) {}
构造器可以是
gamma
对于我来说,我应该提到虚拟基类,因为它们是我上面写的一个例外。虚拟基类对象必须由最派生的类初始化。但是,这只是虚拟继承方式的副作用。在您的示例中使用虚拟继承只能让Intialize直接向后。