多型的底層實現原理

2021-10-06 02:42:37 字數 550 閱讀 1170

1、首先介紹多型的基本概念

1.1虛函式:在函式前面加上virtual關鍵字,變成虛函式,那麼編譯器在編譯的時候就不能確定函式呼叫了

1.2 多型分為兩類

1.3 靜態多型和動態多型的區別:

1.4 使用動態多型需滿足條件

1.5 如何使用動態多型

2.多型的底層實現

父類中寫了乙個虛函式後,內部便有個乙個虛函式指標vfptr,虛函式指標會指向乙個虛函式表vftable,表的內部記錄的是虛函式的位址

當發生繼承時(此處預設為public繼承),子類將繼承父類的所有元素。因此,子類也就繼承了父類中的虛函式指標,此時子類和父類完全相同,子類和父類中的虛函式指標指向的都是父類中虛函式位址。但是當子類重寫了父類中的虛函式後,子類中的虛函式表內部會替換成子類的虛函式位址,父類中的虛函式指標不發生變化。當父類的指標或引用指向子類物件時,將發生多型。因此,當上述函式(即引數為父類指標或引用)的引數指向子類時,將從子類的虛函式表中找到虛函式的位址,此時讀取的是子類中的虛函式。由此形成動態的執行中確定函式位址。

C 多型,虛函式作用及底層實現原理

簡述c 虛函式作用及底層實現原理 c 是物件導向程式設計,其包括3項特點 1 資料抽象 介面和實現分離 2 繼承 父類和子類 3 多型 動態繫結 本文討論多型。當父類希望子類重新定義某些函式時,用virtual關鍵字宣告為虛函式。當我們使用乙個基類型別的引用或者指標,呼叫乙個虛函式時就引發動態繫結 ...

多型 2 多型的實現原理

當類中宣告虛函式時,編譯器會在類中生成乙個虛函式表 虛函式表是乙個儲存類成員函式指標的資料結構 虛函式表是由編譯器自動生成與維護的 virtual成員函式會被編譯器放入虛函式表中 存在虛函式時,每個物件中都有乙個指向虛函式表的指標 vfptr指標 物件在建立的時,由編譯器對vfptr指標進行初始化 ...

多型實現的原理

多型實現的原理從兩個方面說明 1.虛函式表 2.rtti機制 當你在乙個類中使用了virtual關鍵字,那麼就產生了虛函式表,虛函式表中存放的是虛函式的入口位址,父類有父類的虛表,子類有子類的虛表,當繼承時,虛表進行了複製,在子類中重寫了父類的虛函式時,子類虛表中這個函式位址就替換成子類虛函式的位址...