两个类继承于同一个基类,并共享基类的数据,即内存。代码如下:

#include <iostream>  
using namespace std;  
  
//---------------------------------------------------------------------------  
class Atest  
{   //基类  
    public:  
    int i;  
};  
  
class Btest :virtual public Atest//继承时使用了virtual关键字  
{    //继承类  
     public:  
     void set(int value)  
     {  
         i = value;  
     }  
     void show()  
     {  
         cout << i <<endl;  
     }  
};  
  
class Ctest :virtual public Atest  
{   //继承类  
    public:  
    void set(int value)  
    {  
         i = value;  
    }  
    void show()  
    {  
         cout << i << endl;  
    }  
};  
  
class Dtest: public Btest,public Ctest  
{  
   //同时继承了两个中间类  
};  
  
int main(int argc, char* argv[])  
{  
     Dtest d;  
     d.i = 20;  
     d.Btest::set(1290);//改写数据i  
     d.Ctest::show();   //读出数据i  
  
     system("pause");  
       
     return 0;  
}  
//---------------------------------------------------------------------------

这个一个棱形类的继承结构,如果去掉virtual关键字,会出现二义性,编译出错。采用虚基类后,中间任何一个子类改写基类数据i,另一个类型都能读出同样的数据。
类的虚继承_C/C++