C 虛函式的實現機制 虛表如何生成的

時間 2021-06-01 01:53:54

1樓:

派生類構造的時候,基類部分先把自己的虛表建立好,然後派生類把自己重寫的虛函式在基類部分的表裡覆蓋了,然後如果派生類有新的虛函式,也放進這張表。「單繼承情況」

2樓:邱昊宇

補充下:C++ 標準對於虛函式的實現方式沒有任何要求,所以「C++ 虛函式的實現機制」無從說起。通過在物件模型中引入虛表來實現多型,只是各大編譯器的一種常用做法而已。

3樓:

抱歉.我解釋不到位,可能大家會錯意了,

這些意思都是生成虛表的過程

本意應該是 《虛表》 是怎麼生成的

不同的 《子類》 為什麼在同樣的 《虛表》 中它們的位址不同是否被替換了還是被覆蓋了如果我想模擬乙個生成虛表的過程我應該怎麼做

4樓:李黃河

@陳碩心情不好,我跟你說,有本書叫深入c++物件模型,inside c++ object model,看完你就知道了。

還有,計算機專業得多看書,看課外書才行。

光想不看,不動手不行。

5樓:

你知道c++裡有virtual table這個東西嗎,直接查這個表就行了,不需要一層層地找。另外由於c++支援過載,不能光靠函式名找,需要結合函式名+引數型別。

6樓:丁冬

才沒有這麼麻煩呢=_=如果時間複雜度非要和繼承深度呈線性關係,我寧可手寫函式指標...

可以去拿本Inside the C++ Object Model

熟悉c 虛函式底層實現有什麼實際意義

餘朔鈺 除錯以及多執行緒除錯。掛到莫名其妙的地方了,變數值不對了,this指標異常。請問不懂虛函式實現,不懂編譯器怎麼設定類物件記憶體結構的話如何解決? 余世傑 就我個人而言。理解實現之後,可以更直觀的明白,父類指標指向子類的時候,子類指標指向父類的時候,呼叫的是哪個函式,而不用死記硬背,容易錯。任...

請教c 中有關虛函式的問題?

此賬號不再使用 建議題主進行反彙編看看每個類有虛函式的類有乙個虛表虛表儲存了虛函式的位址題主如果呼叫需要訪問物件的成員變數的虛函式當然會出錯因為編譯器在呼叫這些訪問成員變數的函式時會將物件的位址裝入 rsi之類的暫存器通過這個位址訪問成員變數再插一句題主用的是32位編譯環境吧建議把int 轉換換成 ...

c 中,delete是如何呼叫虛析構函式的?

Pluto Hades 正常情況下,基類的構造和析構是不會被派生類覆蓋的。這也很好記,因為它們不同名嘛 正常new派生類指標,會先呼叫基類構造再呼叫派生類構造。正常delete派生類指標,和構造相反,先呼叫派生類析構,再呼叫基類析構。 Bunny.Lann 虛成員函式和虛析構函式肯定都是呼叫D的,只...