C++多重繼承問題!

#include <windows.h>
#include <iostream>

#include <string>
#include <vector>


// 今日遇到一個多重繼承的問題,是一個同事寫的代碼,是一些業務上的邏輯,我把問題該寫爲如下代碼:


class IGameRuleBase
{
public:

 
 IGameRuleBase(){}
 virtual~IGameRuleBase(){}
 
 virtual int Init( ) = 0;
};


class IGameBase
{
public:

 
 IGameBase(){}
 virtual~IGameBase(){}
 
 virtual int Doing( ) = 0;
};

 

class Game : public  IGameRuleBase,
    public  IGameBase
{

public:


 Game( ){ }
 virtual ~Game( ){ }
 
 virtual int Init( ) {return 0;}
 
 virtual int Doing( ){return 1;}
}; 


void ExeGame( IGameBase * pGameRule )
{
 pGameRule->Doing( );
}


int main()
{

 IGameRuleBase * GameRuleBase = new Game( );
 ExeGame( (IGameBase*)pGame );

 return 0;
}

// 在邏輯運行的過程中,單運行到ExeGame函數的pGameRule->Doing( )是否就出現錯誤,
// 原來問題是對象類型的轉換和對象模型的問題,Game是從IGameRuleBase和IGameBase
// 繼承下來,讓IGameRuleBase保存new出來的Game,然後指針轉換到IGameBase指針,導致類的虛表的信息還是原來的
// 沒有隨着轉換而改變,出現這種問題在於寫代碼不嚴謹所致,今日幫同事解決了這個問題
// 回來自己記下來,好讓自己有個警惕,儘可能的少使用多重繼承.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章