相关疑难解决方法(0)

虚拟继承如何解决"钻石"(多重继承)歧义?

class A                     { public: void eat(){ cout<<"A";} }; 
class B: virtual public A   { public: void eat(){ cout<<"B";} }; 
class C: virtual public A   { public: void eat(){ cout<<"C";} }; 
class D: public         B,C { public: void eat(){ cout<<"D";} }; 

int main(){ 
    A *a = new D(); 
    a->eat(); 
} 
Run Code Online (Sandbox Code Playgroud)

我理解钻石问题,上面的代码没有那个问题.

虚拟继承究竟是如何解决问题的?

我的理解: 当我说A *a = new D();,编译器想要知道类型的对象是否D可以分配给类型的指针A,但它有两个可以遵循的路径,但不能自己决定.

那么,虚拟继承如何解决问题(帮助编译器做出决定)?

c++ inheritance multiple-inheritance virtual-inheritance diamond-problem

85
推荐指数
5
解决办法
7万
查看次数

虚拟继承不破坏静态组合?

我在过去5年的工作中假设虚拟继承打破了静态组合.

但是现在我发现,静态组合仍然保持不变,只有关于正确实例位置的附加信息.这是正确的吗?

c++ virtual-inheritance

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