c++ - 在c++which路径中,虚拟继承如何解决多个 inheritance(Diamond)?

  显示原文与译文双语对照的内容

下面的代码是钻石问题。 虚拟继承解决这种歧义。


 #include<iostream>


 using namespace std;



 class A {


 public: void something(){cout<<"A"<<endl;} 


 };



 class B: virtual public A


 {


 public: void something() {cout<<"B"<<endl;} 


 };



 class C: virtual public A {


 public: void something() {cout<<"C"<<endl;} 


 };



 class D: public B, public C {


 public: void something() {cout<<"D"<<endl;} 


 };



 int main()


 {


 A *d = new D();


 d->something();


 }



  • 虚拟继承如何解决这个问题? 是否有 vtable entry项
  • 编译器采用哪个收费路径来到达父类?
时间: 原作者:

在使用虚拟继承时,类的父成员在所有子类之间都是英镑共享的,而不是为每个子类复制,因此实际上没有任何可用。

原作者:
...