虚基类的问题...

来源:百度知道 编辑:UC知道 时间:2024/05/16 10:43:17
#include<iostream>
using namespace std;
class B0
{
public:
int nV;
void fun(){cout<<"Member of B0"<<endl; }
};

class B1:virtual public B0
{
public:
int nV1;
};

class B2:virtual public B0
{
public:
int nV2;
};

class D1:public B1,public B2
{
public:
int nVd;
void fund(){cout<<"Member of D1"<<endl;}
};

void main()
{
D1 d1;
d1.nV=2;
d1.fun();
}

这是书上的例子,我搞不懂它这个例子有什麽实际意义。 这样输出的Member of B0,可要是把D1中的fund()改为fun(),则运行结果为Member of D1。若没virtual 会存在二义性问题?艾,提问题的时候我又运行了类似的程序,去掉virtual,确实出错了, 甚么甚么ambiguous...

我猜你把fun()说明成static也许就不会二义了?

virtual指定了B0只能有一份实体,没有virtual就会有两个,一个是B1里的B0,一个是B2的B0。fun()就不知道是B0,B1哪个object的了。