2012-02-29 93 views
0

我的dizzyCreature類繼承了creature類和dizzy類。它也是creature類的多態集合的一部分。如果我知道creature類中的對象是dizzyCreature,有沒有辦法從dizzy類調​​用函數? 我試圖多重繼承和多態性

creature[2].dizzyCreature::someFunction(); 

dizzyCreature::creature[2].someFunction(); 

既不作品。有任何想法嗎?

回答

3

如果我正確理解你有什麼是這樣的:list<Creature*>。該列表包含一些dizzyCreature實例。在這些情況下,你想調用dizzy類的方法。如果這是目標,那麼你可以使用dynamic_cast來實現這一目標。比方說你有Create* pCreature那麼你可以做:

dizzyCreature* pDizzyCreature = dynamic_cast<dizzyCreature*>(pCreature); 
if(pDizzyCreature) 
{ 
    pDizzyCreature->someDizzyClassMethod(); 
} 
+0

謝謝,我很難找到好的文檔 – Aaron 2012-02-29 05:16:06

0

您需要首先檢查類是正確的類型,然後使用dynamic_cast投它,已經建議。這個解決方案非常優雅,因爲動態類型轉換本身會執行類型檢查 - 即如果您嘗試進行無效轉換,它將返回NULL。 (有沒有必要使用typeid

作爲一個方面說明,如果我是你,我會盡力做你想做的任何事情如果可能的話沒有多重繼承。多繼承可以打開一整罐蠕蟲,除非沒有其他選擇,否則最好避免。