小编Gui*_*cot的帖子

复杂的钻石问题:C++虚拟继承

我有一个钻石问题,看起来像这样:

    __ A
  /    |\
 |  B  |  \
v|/v v\|v  \v
 B2   B3    C
  \v  /v   /
    B4    /
     \   /
       D
Run Code Online (Sandbox Code Playgroud)

我尝试了很多方法来制作最好的虚拟继承,以获得没有重复,但我找不到解决方案.A类包含一个位置.这是一个示例输出:

Call: A() position pointer is: 0x2203be8
Call: B()
Call: B2() position pointer is: 0x2203be8
Call: B3() position pointer is: 0x2203be8
Call: C() position pointer is: 0x2203a28
Call: B4() position pointer is: 0x2203be8
Call: D() position pointer is: 0x2203a28
Run Code Online (Sandbox Code Playgroud)

为什么D和C没有相同的位置指针?为什么这个A ::位置没有构造函数?我应该用什么虚拟继承来解决这个问题?谢谢.

编辑:

这是一个代码示例:

class A;
class B;
class B2 : public virtual B, public virtual A;
class …
Run Code Online (Sandbox Code Playgroud)

c++ multiple-inheritance virtual-inheritance

5
推荐指数
1
解决办法
419
查看次数