天天看點

[CareerCup] 13.3 Virtual Functions 虛函數

13.3 How do virtual functions work in C++?

這道題問我們虛函數在C++中的工作原理。虛函數的工作機制主要依賴于虛表格vtable,即Virtual Table。當類中定義了虛函數時,一個虛表格就建立了用來儲存該類的虛函數的位址。此時編譯器Compiler也會在該類中增加一個虛指針vptr(Virtual Pointer),用來指向虛表格。當一個虛函數在派生類中沒有被重寫時,派生類中的虛表格中仍然存的是基類的虛函數的位址。當虛函數被調用時,就要到虛表格中取找函數位址。C++中的動态綁定機制主要就是通過虛表格來實作的。

當我們将基類的指針指向一個派生類的實體時,虛指針vptr就指向派生類的虛表格,這樣就保證了派生類中的虛函數能被調用,參見如下代碼:

繼續閱讀