我需要从两个不同的基类CBaseA和CBaseB派生一个子类CDerived。
另外,我需要在派生类上调用双方父母的虚函数。由于我想稍后在一个向量中管理不同类型的对象(这不是这个最小代码示例的一部分),我需要从基类指针调用虚拟函数到派生类对象:
#include <iostream>
#include <stdlib.h>
class CBaseA
{
public:
virtual void FuncA(){ std::cout << "CBaseA::FuncA()" << std::endl; };
};
class CBaseB
{
public:
virtual void FuncB(){ std::cout << "CBaseB::FuncB()" << std::endl; };
};
class CDerived : public CBaseB, public CBaseA
{};
int main( int argc, char* argv[] )
{
// An object of the derived type:
CDerived oDerived;
// A base class pointer to the object, as it could later
// be stored in a general vector:
CBaseA* pAHandle = reinterpret_cast<CBaseA*>( &oDerived );
// Calling method A:
pAHandle->FuncA();
return 0;
}
问题:但是在我的计算机上运行它时,调用的是FuncB()而不是FuncA()。如果我“翻转”父类声明,我会得到正确的结果,即
class CDerived : public CBaseA, public CBaseB
但这并不能解决我的问题,因为我无法确定将调用哪个函数。
所以我的问题是: 我做错了什么,处理此类问题的正确方法是什么?
(顺便说一下,我使用的是 g++ 4.6.2)