虛函式的底層實現機制

2021-07-23 05:00:03 字數 1383 閱讀 3150

1、多型的實現機制

c++在基類中宣告乙個帶關鍵之virtual的函式,這個函式叫虛函式;它可以在該基類的派生類中被重新定義並被賦予另外一種處理功能。通過指向指向派生類的基類指標或引用呼叫虛函式,編譯器可以根據指向物件的型別在執行時決定呼叫的目標函式。這就實現了多型。

2、例項

[cpp]view plain

copy

#include

using

namespace

std;  

class

base  

;  class

derive: 

public

base  

;  intmain ()    

3、底層機制

在每乙個含有虛函式的類物件中,都含有乙個vptr,指向虛函式表。

派生類也會繼承基類的虛函式,如果宅派生類中改寫虛函式,虛函式表就會受到影響;表中元素所指向的位址不是基類的位址,而是派生類的函式位址。

當執行語句pbase->fun1()時,由於pbase指向的是派生類物件,於是就呼叫的deriver::fun1()。

4、多重繼承

如果乙個類具有多個包含虛函式的父類,編譯器會為它建立多個virtual table,每個virtual table中各個虛函式的順序與相應的父類一樣。

**:

虛函式的作用及其底層實現機制

虛函式 實現類的多型性 關鍵字 虛函式 虛函式的作用 多型性 多型公有繼承 動態聯編 c 中的虛函式的作用主要是實現了多型的機制 基類定義虛函式,子類可以重寫該函式 在派生類中對基類定義的虛函式進行重寫時,需要再派生類中宣告該方法為虛方法。當子類重新定義了父類的虛函式後,當父類的指標指向子類物件的位...

虛函式實現機制

c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有 多種形態 這是一種泛型技術。虛函式的作用是實現動態聯編,也就是在程式的執行階段動態地選擇合適的成員函式。當程式發現虛函式名前的關鍵...

虛函式實現機制

說到虛函式的實現方法,我們就不得不說到動態聯編 dynamic binding 和靜態聯編 static binding 靜態聯編意味著編譯器能夠直接將識別符號和儲存的實體地址聯絡在一起。每乙個函式都有乙個唯一的實體地址,當編譯器遇到乙個函式呼叫時,它將用乙個機械語言說明來替代函式呼叫,用來告訴cp...