C plus plus 的多態性

多態之目的

以相同的指令調用不同的函數,這種性質稱爲Polymorphism,意思是”the ability to assume many forms”(多態)。多態的目的,就是要讓處理“基類之對象”的程序代碼,能夠完全無障礙地繼承適當處理“派生類之對象”。

 

前期綁定與後期綁定(靜態綁定與動態綁定)

前期綁定,就是對於C/C++的非虛函數(non-virtual),在編譯期就轉換爲一個固定的地址調用了。後期綁定,就是對C/C++的虛函數(包括純虛函數),編譯器無法在編譯期判斷“基類之對象”調用的是哪個函數必須在執行期才能夠判斷

 

虛函數後期綁定的實現(虛函數表)

每一個“內含虛函數的類”,編譯器都會爲它做一個虛函數表,表中的每一個元素都指向一個虛函數地址(表中虛函數地址,是根據類中虛函數聲明的先後次序,來進行排列的)。此外,編譯器會爲每個類加上一個成員變量,是一個指向該虛函數表的指針(常被稱爲vptr)。

派生類會繼承基類的虛函數表(以及所有其它可以繼承的成員),當我們在派生類中改寫虛函數時,虛函數表就受到了影響:表中元素所指的函數地址將不再是基類的函數地址,而是派生類的函數地址。

注:本文總結自《MFC深入淺出》

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