Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 多态对象创建-菱形继承层次结构_Oop_Diamond Problem - Fatal编程技术网

Oop 多态对象创建-菱形继承层次结构

Oop 多态对象创建-菱形继承层次结构,oop,diamond-problem,Oop,Diamond Problem,语言:C/C++ 问题:举一个常见的例子,在哪里 A是父类 B和C都是从A类继承的 D继承自B和C 我们希望通过D 注意:这是虚拟继承!所以我们知道只有一个A的对象 问题是:谁的对象将首先创建B,还是C 牢记等级制度 A / \ B C \ / D 简言之,OO本身对此没有任何保证 如果你谈论的是特定的实现或语言(但问题不是这样),那么这可能是有保证的。是的,这个问题有时也被省略为死亡钻石 不幸的是,您的问题无法得到回答:它基于您当前使用的编程语言。 例如,

语言:C/C++
问题:举一个常见的例子,在哪里

  • A是父类
  • BC都是从A类继承的
  • D继承自BC
我们希望通过D

注意:这是虚拟继承!所以我们知道只有一个A的对象

问题是:谁的对象将首先创建B,还是C

牢记等级制度

   A
 /   \
B     C
 \   /
   D
简言之,OO本身对此没有任何保证


如果你谈论的是特定的实现或语言(但问题不是这样),那么这可能是有保证的。

是的,这个问题有时也被省略为死亡钻石

不幸的是,您的问题无法得到回答:它基于您当前使用的编程语言。

例如,在Scala中(traits允许多重继承),有一个非常严格的实例化规则,您可以在那里找到适当的细节


我想你是在玩C++。如果是这样,请看一下())的正确部分。

如果你在谈论C++和类的顺序,那么它将取决于声明中的继承顺序。 那么在

class D :  public B,public C
先实例化B,然后实例化C

class D :  public C,public B

C首先被实例化,然后B.< /P> THNX回答:“我欠你一个大的:”没有PROB,但是你可以添加你正在编码的语言的标签,并且编辑问题文本只是为了使它对其他人更有意义。@ C++中的AliShahzeb取决于你列出你继承的类的顺序,例如

D类:公共B,公共C
将在C之前构造B。