天天看點

面試題(一)

面試題(一)

請你來說一下靜态函數和虛函數的差別:

靜态函數在編譯的時候就已經确定運作時機,虛函數在運作的時候動态綁定。虛函數因為用了虛函數表機制,調用的時候會增加一次記憶體開銷

請你來說一說重載和覆寫:

重載:兩個函數名相同,但是參數清單不同(個數,類型),傳回值類型沒有要求,在同一作用域中;

重寫:子類繼承了父類,父類中的函數是虛函數,在子類中重新定義了這個虛函數,這種情況是重寫。

請你說一說你了解的虛函數和多态:

多态的實作主要分為靜态多态和動态多态,靜态多态主要是重載,在編譯的時候就已經确定;動态多态是用虛函數機制實作的,在運作期間動态綁定。舉個例子:一個父類類型的指針指向一個子類對象時候,使用父類的指針去調用子類中重寫了的父類中的虛函數的時候,會調用子類重寫過後的函數,在父類中聲明為加了virtual關鍵字的函數,在子類中重寫時候不需要加virtual也是虛函數。

虛函數的實作:在有虛函數的類中,類的最開始部分是一個虛函數表的指針,這個指針指向一個虛函數表,表中放了虛函數的位址,實際的虛函數在代碼段(.text)中。當子類繼承了父類的時候也會繼承其虛函數表,當子類重寫父類中虛函數時候,會将其繼承到的虛函數表中的位址替換為重新寫的函數位址。使用了虛函數,會增加通路記憶體開銷,降低效率。

雪兒言