Code
#include <iostream>
public A
{
public:
void f()
{
std::cout << "A::f()" << std::endl;
}
};
public B : public A
{
public:
void f()
{
std::cout << "B::f()" << std::endl;
}
};
public C : public A
{
public:
void f()
{
std::cout << "C::f()" << std::endl;
}
};
public D : virtual public B, public C
{
};
如上代码,首先如果不在D的继承中,将一个父类(B或C)加上virtual关键字的继承的话,编译会出错,因为在D中会有两条路径继承A的f()函数,会产生冲突。
然后D的对象直接调用f()也会出错,会有二义性,解决方法是加上类的修饰符。
如
D d;
d.B::f();
d.A::f();