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();
};
怎样在派生类中重写这两个相同原型的虚函数呢?
也许这种情况并不常见,可是这种情况却确实存在。比如说开发的时候使用的两个类库是不同的厂商提供的,或者说这两个类库是由公司的不同开发小组开发的。对前者来说,修改基类的接口是不可能的;对后者来说,修改接口的代价很大。
如果在派生类中直接重写这个虚函数,那么2个基类的Test()虚函数都将被覆盖。这样的话就只能有一个Test()的实现,而不是像前面的例子那样有不同的实现。
class CDerived : public CBaseA, public CBaseB
{
public:
virtual void Test();
};
vo
C++多重继承通过中间类继承重写不同基类中相同类型的虚函数
最新推荐文章于 2023-05-17 13:37:52 发布