2014-01-12 49 views
0

行,所以我有一個多態類層次結構設置這樣的:調用與多個派生類基類的成員函數

class Base 
{ 
    virtual void show(); 
}; 

class DeriveA : Base 
{ 
    void show(); 
}; 

class DeriveB : Base 
{ 
    void show(); 
}; 

DeriveA DeriveA_obj; 
DeriveB DeriveB_obj; 

和指針型基

Base *bPointer 

指向的對象類型DeriveB會

bPointer->show(); 

調用DeriveA_obj.show()和DeriveB_obj.show()?

如果我有一個指針類型DeriveA

DeriveA *dPointer 

指向的對象類型DeriveA比DeriveA_obj.show會

dPointer->show(); 

調用任何其它(); ?因爲它似乎不應該
但我發誓它做得更早!

謝謝!

回答

2

調用虛擬方法會調用所指向的對象中方法的派生最多版本。 bPointer->show()將呼叫DeriveA_obj.show()如果bPointer指向DeriveA_obj,並且如果bPointer指向DeriveB_obj將呼叫DeriveB_obj.show()。如果您有DeriveC類別從DeriveBbPointer派生出指向DeriveC對象,則如果在DeriveC中覆蓋show(),則調用bPointer->show()將調用DeriveC_obj.show()

1

我有一個指針類型基地Base *bPointer指向一個對象類型DeriveBbPointer->show();電話DeriveA_obj.show()DeriveB_obj.show()

不,絕對不是。如果bPointer的動態類型爲DeriveB,則只執行對相應的DeriveB::show函數的調用。 Viceversa,如果動態類型是DeriveA,它會調用DeriveA::show

如果我有一個指針DeriveA *dPointer指向的對象類型DeriveAdPointer->show();調用比DeriveA_obj.show();其他什麼嗎?

再一次,你必須看看動態類型。動態類型是DeriveA,這意味着將調用DeriveA::show

相關問題