虛函數的理解

一、對於C++中的虛函數一直都是靠着死記硬背的方式在使用,今天特意查閱了一下它的實現原理。
函數

二、虛函數:C++中爲了實現多樣性的一個工具。使用virtual關鍵字修飾的函數即爲虛函數,派生類自動繼承虛函數性質。使用時,用基類指針指向派生類對象,直接調用派生類的虛函數。達到接口與實現分離的目的(多樣性,相同的方法接口,但因個體差別而採用不一樣的實現,傳遞的消息時同樣的,這點不一樣於重載)。工具

三、實現原理:若是類中有虛函數,在建立對象的時候編譯器會自動給對象添加一個成員變量*vptr,該指針指向對應類的虛函數地址表vtbl。vtbl的做用是保存類中全部定義的虛函數的函數指針,其結構以下圖1所示。 在基類指針指向了派生類對象時,其能夠訪問派生類的vptr,此時指針vptr指向的是派生類的虛函數表vbtl。該表中存儲的是派生類中的定義實現的虛函數。所以,就至關因而使用基類指針直接調用派生類的成員函數了。而用戶使用時,只須要使用基類的函數fun()做爲接口就能夠實現相同的消息不一樣實體有不一樣反應的目的了(多樣性)。spa


圖1  vtbl結構圖指針

相關文章
相關標籤/搜索