以前一直對虛函式和rtti不是很了解,最近看了下書,對虛函式和rtti有了一些新的了解。
在很多的地方我們都能找到虛函式是通過vftable(虛函式表)來實現的,下面我來說下我自己的理解。有虛函式的物件,在其資料區會有虛函式表指標,這個指標指向虛函式表。
一,類會有幾個虛函式表和虛函式指標呢?
乙個類只有乙個虛函式表,不管這個類有多少例項。
乙個沒有父類的的類最多有且只有乙個虛函式表指標,有虛函式時,有虛函式表,反之,則沒有。當有父類的時候,子類的vftable指標的數量=父類指標數量之和。
二,類中有多個虛函式表指標,這些指標指向**?
類中所有虛函式表指標都指向類唯一的虛函式表。
三,虛函式表中是什麼?
虛函式表存放的是虛函式真正的執行位址。
在說說rtti,rtti是執行時型別資訊,主要有兩個操作符typeid和dynamic_cast。
一,為什麼說類中必須有虛函式才能用rtti?
rtti的機制是通過對比類的虛函式表來確定是那個類,因為虛函式和類是一一對應的。沒有虛函式也就沒有虛函式表,所以rtti無法判斷。
二,rtti的效率怎麼樣?
rtti的效率是很低下的。不推薦使用
RTTI 執行時型別檢查 虛函式
在c 層面主要體現在dynamic cast和typeid,vs中虛函式表的 1位置存放了指向type info的指標。對於存在虛函式的型別,typeid和dynamic cast都會去查詢type info rtti即執行時型別識別,用來識別動態物件的型別。即使我們僅僅有基類的指標和引用,可以識別...
C C 類和物件 RTTI和虛函式表
run time type identification 執行時型別識別 通過執行時型別識別,程式能夠使用基類的指標或引用來檢查這些指標或引用所指向的物件的實際派生型別。human phuman new men human q phuman 主要是通過兩個運算子來實現的 dynamic cast 能...
虛函式與純虛函式
1 基本形式 virtual returntype function 1 虛函式宣告 virtual returntype function 2 0 純虛函式宣告 先講示例吧,再總結結論。2 示例 classanimail 這段 的輸出結果是什麼呢?起初我認為是 animail function 1...