虛方法在類繼承中的使用

 首先來看一下一個繼承

Brass類在聲明ViewAcct()和Withdraw()時使用了virtual,這有什麼用呢?

 

如果方法是通過引用或指針而不是對象調用的,它將確定使用哪一種方法,我們知道在類的繼承中,基類指針可以在不進行顯式類型轉換情況下指向派生類對象;基類引用可以在不進行顯式類型轉換的情況引用派生類對象。如果沒有使用virtual關鍵字,程序將根據引用類型或指針類型選擇方法;如果使用了virtual,程序將根據引用或指針指向的對象的類型來選擇方法。如果ViewAcct不是虛擬的,則程序的行爲如下:

引用變量類型爲:Brass,所以選擇了Brass::ViewAccount()。使用Brass指針代替引用時,行爲與之類似。

 

如果ViewAcct()是虛擬的,則行爲如下:

 

這裏兩個引用的類型都是Brass,但b2_ref引用的是一個BrassPlus對象,所以使用的是BrassPlus::ViewAcct()。使用Brass指針代替引用時,行爲將類似。

 

方法在基類中被聲明爲虛擬的後,它在派生類中將自動成爲虛方法。不過,在派生類聲明中使用關鍵字virtual來指明哪些函數是虛函數也不失爲一個好方法。

 

基類聲明瞭一個虛擬析構函數。這樣做是爲了確保釋放派生對象時,按正確的順序調用析構函數。

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