C 之虛函式實現

2022-08-14 20:33:11 字數 750 閱讀 9291

c++中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有「多種形態」,這是一種泛型技術。所謂泛型技術,說白了就是試圖使用不變的**來實現可變的演算法。比如:模板技術,rtti技術,虛函式技術,要麼是試圖做到在編譯時決議,要麼試圖做到執行時決議。

虛函式表指標

定義了virtual函式,例項化乙個基類物件時,例項物件中儲存了成員變數和虛函式表指標。

虛函式指標指向乙個虛函式表,虛函式表也佔一定的空間,通過基類例項化的所有例項都共用乙個虛函式表。

虛函式表儲存函式指標,儲存入口函式位址。

呼叫時候,先找到虛函式指標,再找到虛函式表,通過相應的偏移找到虛函式入口位址再找到相應的執行函式

例項化子類時,也會有虛函式指標列表,如果仍然使用繼承自父類的方法,則入口函式位址和父類的相同

如果子類中重新定義了虛函式的方法,子類的虛函式表中指向的函式入口位址是自己定義的而不是父類的,相當於覆蓋了父類的方法

父類指標指向子類物件 ,則通過子類物件的虛函式指標找到虛函式表,與父類同樣多的偏移量,找到子類物件的函式入口

C 之虛函式

若乙個例項方法宣告前帶有virtual關鍵字,那麼這個方法就是虛方法。虛方法與非虛方法的最大不同是,虛方法的實現可以由派生類所取代,這種取代是通過方法的重寫實現的 以後再講 虛方法的特點 虛方法前不允許有static,abstract,或override修飾符 虛方法不能是私有的,因此不能使用pri...

C 之虛函式

引入原因 為了方便使用多型特性,我們常常需要在基類中定義虛函式。class cman void move private class cchild public cman private cman m man cchild m child cman p 虛函式的使用精髓,如果不定義基類的指標去使用,...

c 之虛函式

靜態聯編也叫做早繫結,函式名與其在記憶體中的可執行 之間的對應關係在編譯時就已經確定了 動態聯編也叫做晚繫結,是之成員函式的呼叫語句在編譯時不知道要執行哪個記憶體位址的 成員函式的呼叫會根據目標物件的動態型別在程式執行時將函式名繫結到具體的函式上 靜態聯編舉例 class shape 執行上面的 後...