|
1
0
当前CLR不支持多重继承。然而,事实证明(看看标准的c++)编译器可以模拟多重继承,即使它只支持单一继承。 实际上,这就是MC++所做的。 理想情况下,您至少需要:
多重继承仿真 假设你想上课 A 从类继承的 地下一层 和 地下二层 . 假设课程是:
从概念上讲,编译器(泛型编译器可以做的)可以在幕后完成以下工作: 创建一个新类型, A1级 这是一个有两个字段的简单对象。代码可能如下所示:
然后,在编译时,通过访问以下字段透明地转换调用: 你的高级代码
可以上交(暂时不考虑构造函数):
类型系统管理 这很困难,因为编译器不能使用语言的标准规则,但需要使用编译时发出的helper方法来执行类型检查。 你的高级代码
可以变成
在哪里
这个
重写方法时解决歧义
这是一个棘手的问题,因为你必须解决的问题,如
Diamond Problem
. 幸运的是,这是一个众所周知的问题,您可以找到一个解决方案(至少是次优的)。
调用继承方法和实例方法时,编译器需要修补
处理构造函数和终结器 构造函数是终结器,终结器是特定的虚拟/继承方法。特别是,在C++中,被构造/销毁的对象的类型随时间而变化,在层次结构的结尾停止。在构造/销毁对象时,您必须面对虚拟方法调用,尽管这不是一种好的做法。 旁注 MC++编译器发出一个值类型,该值类型使用这些概念并重写操作符,以获得所需的语义。 构建一个满足您要求的编译器很有挑战性,但确实很难,因为您首先必须为所有新情况定义一个正确的行为(例如,考虑diamond问题),而好处可能是有限的。 使用接口而不是类,可能有助于避免多重继承。 |
|
|
Silverspur · “X是Y的模糊基”:多重继承噩梦 8 年前 |
|
|
Aedoro · 扩展多个类的C++函数参数 8 年前 |
|
|
user6022430 · Python3.4多重继承调用特定构造函数 10 年前 |
|
|
Mark van der Wilk · 用于重写继承方法的Mixin 10 年前 |
|
pasha · 是否可以为复制基的虚拟函数提供不同的定义? 10 年前 |
|
|
Daniel · 如何使继承从父类到子类python34起作用 10 年前 |