2 つの異なる基本クラスCBaseAとCBaseBから子クラスCDerivedを派生させる必要があります。
さらに、派生クラスで両方の親の仮想関数を呼び出す必要があります。後で 1 つのベクトルで異なる型のオブジェクトを管理したいので (これはこの最小限のコード例の一部ではありません)、基底クラス ポインターから派生クラス オブジェクトへの仮想関数を呼び出す必要があります。
#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;
}
問題:しかし、これを私のコンピューターで実行すると、 FuncA()の代わりにFuncB ()が呼び出されます。親クラスの宣言を「反転」すると、正しい結果が得られます。
class CDerived : public CBaseA, public CBaseB
しかし、どの関数が呼び出されるかわからないため、これで問題は解決しません。
だから私の質問は次のとおりです: 私は何を間違っていますか?そのような問題を処理する正しい方法は何ですか?
(ちなみにg++ 4.6.2を使っています)