【发布时间】:2011-07-15 08:21:45
【问题描述】:
难道不能仅通过使用找到的第一个继承声明来解决菱形问题吗?我的意思是,
公共类 A { 公共虚拟 int getInt(); }; 公共类 B:公共 A { 公共 int getInt() {返回 6;} }; 公共类 C:公共 A { 公共 int getInt() {返回 7;} }; 公共类 D:公共 B,公共 C {};对于class D,由于B 列在第一位,如果调用D::getInt(),我们不能默认(当它不明确时)使用B::getInt() 吗? PATH 环境变量在 UNIX 和其他操作系统中的工作方式;如果在 PATH 变量的不同位置存在两个具有相同名称的事物,则默认情况下应使用第一个位置(除非另有限定)。
编辑:通过“第一个”继承声明找到我的意思是根据简单的从左到右深度优先顺序
编辑#2:刚刚更新了上面的实现,使其更像钻石。
【问题讨论】:
-
这里没有钻石问题,看起来像普通的旧多重继承
-
另外,如果有人不小心把订单改成了
BAC怎么办?或者在其他类中使用该顺序派生 - 它非常脆弱.. -
这里的根本问题不是 A 中的任何虚拟成员在 B 或 C 中可能有不同的实现,并且没有办法解决 D 中的这些差异,因为这几乎需要编译器确切地知道你想要完成什么(这会破坏程序员的目的)。
-
通过任意猜测程序员的意思来解决歧义可能会导致代码的行为与程序员的预期不符。强制程序员明确说明预期的行为会减少出错的空间。
标签: c++ multiple-inheritance diamond-problem