我的dizzyCreature
類繼承了creature
類和dizzy
類。它也是creature
類的多態集合的一部分。如果我知道creature
類中的對象是dizzyCreature
,有沒有辦法從dizzy
類調用函數? 我試圖多重繼承和多態性
creature[2].dizzyCreature::someFunction();
和
dizzyCreature::creature[2].someFunction();
既不作品。有任何想法嗎?
我的dizzyCreature
類繼承了creature
類和dizzy
類。它也是creature
類的多態集合的一部分。如果我知道creature
類中的對象是dizzyCreature
,有沒有辦法從dizzy
類調用函數? 我試圖多重繼承和多態性
creature[2].dizzyCreature::someFunction();
和
dizzyCreature::creature[2].someFunction();
既不作品。有任何想法嗎?
如果我正確理解你有什麼是這樣的:list<Creature*>
。該列表包含一些dizzyCreature
實例。在這些情況下,你想調用dizzy
類的方法。如果這是目標,那麼你可以使用dynamic_cast
來實現這一目標。比方說你有Create* pCreature
那麼你可以做:
dizzyCreature* pDizzyCreature = dynamic_cast<dizzyCreature*>(pCreature);
if(pDizzyCreature)
{
pDizzyCreature->someDizzyClassMethod();
}
您需要首先檢查類是正確的類型,然後使用dynamic_cast
投它,已經建議。這個解決方案非常優雅,因爲動態類型轉換本身會執行類型檢查 - 即如果您嘗試進行無效轉換,它將返回NULL。 (有沒有必要使用typeid
)
作爲一個方面說明,如果我是你,我會盡力做你想做的任何事情如果可能的話沒有多重繼承。多繼承可以打開一整罐蠕蟲,除非沒有其他選擇,否則最好避免。
謝謝,我很難找到好的文檔 – Aaron 2012-02-29 05:16:06