是多重继承编译器编写者的问题? - C ++

我一直在阅读有关多重继承

http://stackoverflow.com/questions/225929/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

但由于代码不编译直到歧义解决了,这难道不是让多重继承的仅有的编译器编写者的问题吗? - 如何这个问题影响到我的情况,我不想永远编写一个编译器

--------------解决方案-------------

如果你要编写编译代码,你必须要知道什么样的问题,可能会导致其无法编译,以及如何避免这些情况。 这是你的问题,因为编译器的用户,来设计你的继承层次结构的方式,他们将编译。

此外,如果你不知道如何多重继承的工作,你可能有关于究竟你的类做错误的假设。 如果类不同的表现比您预期当您尝试使用它们就会造成错误。

编译器作者将打印一个讨厌的错误信息并停止编译代码,如果你有一个未解决的模糊性,由于多重继承。 当他们说,该代码将无法编译,直到歧义解决了,有几个问题,你要考虑:

  1. 你没有一个工作程序,直到歧义解决。
  2. 编译器不解决它。
  3. 因此,直到你解决它,那是你的问题,而不是编译器作者的。

不,它不是一个一个编译器作者的问题:

  • 一般而言,编译器作者可能会被定义如何多重继承工作。
  • 特别是对于C ++,有几种解决方案,为作家来实现。

它是为C ++程序员的一个问题,但只有当你不理解MI如何在C ++中。

我有一个通用的解决方案,是有它定义了一个公共接口的基类 - 你那么认为的具有不同小节,然后您再进行实施,因为不同的抽象类,这是由一个具体的叶类多重继承:

------
| Base |
------
| |
------
^
|
-----------------
| | |
------ ------ ------
| A | | B | | C |
------ ------ ------
| | | | | |
------ ------ ------
^ ^ ^
| | |
-----------------
|
-------
|Derived|
-------
| |
-------

每一个的A,B和C的实施基地,这意味着你可以换出的非重叠小节,比方说,一个'用于替代或改进的实施,而不会影响其他类。

一般情况下,是的,你击中了要害。 它显著增加参与维持编译器的复杂性和努力,但对于程序员,它只会增加少量的额外的复杂性,主要是涉及到具有是如果一个菱形出现问题繁琐特定。 (这应该是非常罕见的一个精心设计的对象层次。)

分类:C# 时间:2015-03-15 人气:0
本文关键词: C#中,继承,多继承
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.058 (s). 10 q(s)