两个类继承于同一个基类,并共享基类的数据,即内存。代码如下:
#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,另一个类型都能读出同样的数据。