在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数。下面就是一个例子:
class CBaseA
{
public:
virtual void TestA();
};
class CBaseB
{
public:
virtual void TestB();
};
class CDerived : public CBaseA, public CBaseB
{
public:
virtual void TestA(); // 重写基类CBaseA中的虚函数TestA()
virtual void TestB(); // 重写基类CBaseB中的虚函数TestB()
};
void Test()
{
CDerived D;
CBaseA *pA = &D;
CBaseB *pB = &D;
pA->TestA(); // 调用类CDerived的TestA()函数
pB->TestB(); // 调用类CDerived的TestB()函数
}
可是,如果两个基类中有一个相同原型的虚函数,例如下面这样:
class CBaseA
{
public:
virtual void Test();
};
class CBaseB
{
public:
virtual void Test();
};
怎样在派生类中重写这两个相同原型的虚函数呢?
也许这种情况并不常见,可是这种情况却确实存在。比如说开发的时候使用的两个类库是不同的厂商提供的,或者说这两个类库是由公司的不同开发小组开发的。对前者来说,修改基类的接口是不可能的;对后者来说,修改接口的代价很大。