问题引入:
class A
public:
void f();
};
class B:public A
{
public:
void f();
};
class C:public A
{
public:
void f();
};
class D:public B,public C
{
public:
void f();
};
int main()
{
D d;
d.A::f();//ambiguous,不明确的
return 0;
}
解决方法:
问题引出:虚基类
class A//虚基类
{
public:
void f();
};
class B:virtual public A//虚继承
{
public:
void f();
};
class C:virtual public A
{
public:
void f();
};
class D:public B,public C
{
public:
void f();
};
int main()
{
D d;//注意:D直接构造A; B、C不生成A(引用); 构造顺序A,B,C,D
d.A::f();//正确
return 0;
}