1. 程式人生 > >淺析多型實現原理

淺析多型實現原理

實現過程

  • 當我們在宣告一個類時,編譯器會自動幫我們建立一個虛擬函式表。
    比如下面的這段程式碼:
    在這裡插入圖片描述
    編譯器為我們生成的虛擬函式表
    在這裡插入圖片描述
    虛擬函式表:

    虛擬函式表是由編譯器自動產生的一種儲存類成員函式的一種資料結構。其中虛擬函式會被自動放入表中。

  • 那編譯器是怎麼找到虛擬函式表呢?
    原來當我們當我們用類定義物件的時候,編譯器內部會為成員結構體變數中增加一個指向虛擬函式表的指標 (vptr),當我們通過函式形參將子類傳進來的時候,編譯器首先會判斷所傳形參的資料型別,如果呼叫的函式具有virtual關鍵字,編譯器會通過vptr指標,找到相應的虛擬函式表,繼而找到相應的虛擬函式,達到所謂的遲繫結狀態,即動態聯編。如果不具有virtual關鍵字,編譯器可直接確定被呼叫的成員函式

    ,即靜態聯編。
    在這裡插入圖片描述