C 面試知識 虛函式的實現機制

2021-09-13 16:12:59 字數 710 閱讀 4143

阿里面試題,沒答出。。

四個字:虛函式表。

存放著類中所有虛函式對應的函式指標的表。

圖**:

該過程由編譯器完成,也就是說虛函式替換發生編譯階段

圖**:

上面pb具體指向的物件型別如何確定呢?(根據虛函式表)

如果pb指向b,那麼找到b的虛函式表的位址,再加上bar函式在表中的偏移量就可以找打對應的函式b::bar()了;

如果pb指向d,那麼找到d的虛函式表的位址,再加上bar函式在表中的偏移量就可以找打對應的函式d::bar()了;

圖**:

乙個類繼承多個類時,而且子類都有虛函式,該類將有多個虛函式表,每個表的構造過程與單繼承一樣,每個表都進行拷貝與替換

虛函式呼叫過程變化不大,只是基類指標指向的位置可能不是派生類物件的起始位置,因為派生類將有多個虛函式表。

C 虛函式實現機制

看完之後,對c 中的虛函式實現機制算的上是恍然大悟,但是個人感覺博文中有幾點不足之處,現在一一枚舉,以下語言僅僅代表個人看法 1.定位虛表的方式 大家都知道含有虛函式的類的例項裡面前4個位元組是虛函式指標占用的記憶體,裡面填充的是虛函式表的位址號。原博文中通過乙個long型別的物件取得前四個位元組的...

c 虛函式實現機制

1 c 實現多型的方法 其實很多人都知道,虛函式在c 中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c 其中一篇文章裡面可以知道 是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下 class a class b public a a,b的實現省略 ...

C 虛函式實現機制

c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。對c 了解的人都應該知道虛函式 virtual function 是通過一張虛函式表 virtual table 來實現的。簡稱為v table。在這個表中,...