是多重继承一个编译器编写者的问题? - C++
我一直在阅读有关多重继承是多重继承一个编译器编写者的问题? - C++
What is the exact problem with multiple inheritance? http://en.wikipedia.org/wiki/Diamond_problem
http://en.wikipedia.org/wiki/Virtual_inheritance
http://en.wikipedia.org/wiki/Multiple_inheritance
但由于代码不编译,直到不确定性得到解决,没有这个做多重继承编译器编写者只有一个问题? - 这个问题如何影响我的情况下,我不想编码编译器
如果你想编写代码编译,你必须知道什么样的问题可能导致其无法编译,以及如何避免这些情况。作为编译器的用户,您的问题是要以可编译的方式设计继承层次结构。
此外,如果你不明白多重继承是如何工作的,你可能会错误地假设你的类是做什么的。如果类的行为与预期不同,那么当您尝试使用它们时会导致错误。
一般来说,是的,你击中了头部的指甲。它显著增加参与维持编译器的复杂性和精力,但对于程序员,它只是增加了少量的额外的复杂性,主要涉及不必是如果钻石出现问题繁琐具体。 (这应该是一个精心设计的对象层次非常罕见的。)
如果由于多重继承而导致未解决的歧义,编译器编写器将打印一个令人讨厌的错误消息并停止编译您的代码。当他们说代码在歧义解决之前不能编译时,有几个问题需要考虑:
- 直到解决了歧义之后,您才有工作程序。
- 编译器无法为您解决它。
- 因此,直到你解决它,这是你的问题,不是编译器作者的。
不,它不是一个编译器作者一个问题:
- 一般编译器作者可能会被定义继承如何的多部作品。
- 具体地为C++,存在用于写入器实现了几种解决方案。
这对C++程序员来说是一个问题,但前提是你不了解MI在C++中的工作方式。
我有一个通用的解决方案,它有一个基类,它定义了一个公共接口 - 然后您认为它具有不同的子节点,然后将其实现为不同的抽象类,它们被具体的叶类继承:
------
| Base |
------
| |
------
^
|
-----------------
| | |
------ ------ ------
| A | | B | | C |
------ ------ ------
| | | | | |
------ ------ ------
^ ^ ^
| | |
-----------------
|
-------
|Derived|
-------
| |
-------
每个A,B和C的执行基地非重叠子部分,这意味着可以换出,说A,为A”用于替代或改进的实施,而不会影响任何其他类。