C 虛函式表解析

2021-09-25 11:16:04 字數 618 閱讀 1902

參考:

虛函式表是乙個類的虛函式位址表,在虛函式類的例項中,這個表被分配到了例項的記憶體中。

c++編譯器保證虛函式表的指標位於物件例項中最前面的位置,因此可以通過物件例項的位址

得到這張虛函式表,然後遍歷其中的函式指標,並呼叫相應的函式。下面分幾種情況討論(可參考

上述博文,博主畫了圖,很清楚):

1、單繼承(無虛函式覆蓋):

在派生類的例項中,可以看到:虛函式按照宣告順序放於同一張表中,且父類的虛函式放於

子類的虛函式之前。

2、單繼承(有虛數覆蓋):

在派生類的例項中,覆蓋的函式放到了父類相應的函式的位置,沒有被覆蓋的函式依舊。

3、多重繼承(無虛函式覆蓋):

在子類例項中,每個父類都有自己的虛表,且子類的虛函式放到了第乙個虛表中。

4、多重繼承(有虛函式覆蓋):

將父類相應虛函式的位置,皆換成子類相應的虛函式。

補充:上面的內容缺少了虛繼承的情況,下面是對其補充,不得不說,c++實在是太複雜了。

在虛繼承的情況下,父類的虛函式不會與子類共用乙個虛函式指標,並且子類還會再生成乙個

虛指標指向父類。

參考:          

C 虛函式表解析

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

C 虛函式表解析

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

C 虛函式表解析

今天我做的筆記 c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有 多種形態 這是一種泛型技術。所謂泛型技術,說白了就是試圖使用不變的 來實現可變的演算法。比如 模板技術,rtti技...