1. 程式人生 > >虛函數總結

虛函數總結

發生 派生類 進行 派生 類的構造函數 調用 復制 對象賦值 類的初始化

因為平時不太常用 看C++PP的時候刷到這一部分內容,記錄下來以後復習用

相關內容:

派生類構造函數要點:

1.首先創建基類對象

2.派生類構造函數應通過成員初始化列表將基類信息傳遞給基類構造函數

3.派生類構造函數應初始化派生類新增的數據成員

在派生類的初始化列表中通過基類的構造函數對派生類對象進行初始化是通過基類的復制構造函數完成的

因為復制構造函數傳遞的是引用類型,而基類可以引用派生類,所以編譯器會自動將初始化後的新基類對象賦值給派生類對象,如果須要對派生類對象獨有的變量進行初始化,可以在初始化列表後用逗號跟上,或者在構造函數花括號內寫明

正文:

基類的指針或引用是可以指向或引用派生類的,以下都用指針來舉例,引用也同樣適用

指針調用非虛函數時會根據指針類型來判斷使用的函數類型

說的簡單點就是利用基類指針指向派生類對象時,利用該指針實現非虛函數,不管是否重載函數,都會調用基類的函數

這樣就很不方便 例如一個基類指針數組,既存儲既基類對象又存儲派生類對象,那麽在實際操作的時候會無法通過指針正確的訪問派生類對象重載過的非虛函數

所以引入了虛函數的概念

指針調用虛函數時會根據指針所指向的對象類型來判斷使用的函數類型

這樣使用基類指針會方便很多

同時書上將基類的析構函數也定義為虛函數,何時需要這樣做呢?

當基類對象的析構函數為非虛函數時將不會執行派生類的析構函數

如果派生類對象的析構函數執行了某些操作,例如delete釋放內存,將會導致內存泄漏等情況的發生

為了防止這種意料之外的情況發生,基類必須要有一個虛析構函數,哪怕析構函數不執行任何操作,也要顯示聲明

待續

虛函數總結