動態多型和靜態多型(C )

2021-10-09 23:01:33 字數 1762 閱讀 3563

(1)重寫基類函式(方法)

c++中當我們乙個類繼承於乙個另乙個類時,我們在派生類中不想使用基類中的函式,想重新寫乙個同名函式,這是被允許的;因此我們的基類與派生類可以有同名的函式;例如我們現在有乙個類中已經有了乙個函式名為show無參的函式,我們在派生類中再寫乙個名為show函式,這叫函式過載也稱為覆蓋和重寫;

測試**:

#include

using

namespace std;

classaa}

;classbb:

public aa};

intmain()

執行結果:

因為此時派生類中重寫了父類中的同名函式,因此在bb類中看到的show的函式是派生類中的重寫後的show函式;其實aa類中的show函式還是存在的,並不是說重寫了函式後,它就不存在了因此我們還是可以通過指定類中=名去呼叫aa類中的函式

測試**:

#include

using

namespace std;

classaa~

aa()void

show()

};classbb:

public aa~bb

()void

show()

};intmain()

執行結果:

(1)引用

(2)指標:

很明顯該程式執行的結果並沒有按照aa型別的指標指向的真正的內容去執行對應的**,而我們是想要編譯器能夠正確地知道aa &b(或指標)所指向地內容是什麼型別的而不是根據當前指標或引用的型別去判斷呼叫什麼函式,此時我們實現這種動態多型就需要通過使用關鍵字virtual來實現;

(1)virtual 修飾的函式稱為虛函式,其是通過使用virtual關鍵字後產生乙個虛表(虛函式表),然後每乙個物件會建立乙個虛表,虛表存放當前物件擁有的虛函式

(2)當虛函式被建立後就會被放入虛表,當派生類重寫虛函式後,建立派生類物件時會把虛表內的對應函式位址換成派生類中重寫的函式位址

注意:

(1)每次執行虛函式都會去重新去替換掉原來虛表的位置

(2)當使用虛函式後原來函式的存放位置會分配乙個指標用於指向虛表中函式的位址

(3)乙個物件可以擁有多個虛函式,但只能有乙個虛表

測試**:

#include

using

namespace std;

classaa~

aa()virtual

void

show()

};classbb:

public aa~bb

()void

show()

};intmain()

執行結果:

C 多型 靜態多型與動態多型

多型 顧名思義,多型就是多種形態,也就是對不同物件傳送同乙個訊息,不同物件會做出不同的響應。並且多型分為靜態多型和動態多型。靜態多型就是在系統編譯期間就可以確定程式執行到這裡將要執行哪個函式,例如 函式的過載,物件名加點操作符執行成員函式等,都是靜態多型,其中,過載是在形成符號表的時候,對函式名做了...

靜態多型 動態多型

又稱編譯期多型,即在系統編譯期間就可以確定程式將要執行哪個函式。例如 函式過載,通過類成員運算子指定的運算。函式過載示例 class a a int x void f void f int x class b void f void f int x 以上,類a中兩個a 是函式過載,兩個f 是函式過載...

C 靜態多型與動態多型

多型按字面的意思就是多種形態,相同的方法呼叫,但是有不同的實現方式。多型性可以簡單地概括為 乙個介面,多種方法 c 有兩種多型形式 靜態多型 也稱為編譯期間的多型,編譯器在編譯期間完成的,編譯器根據函式實參的型別 可能會進行隱式型別轉換 可推斷出要呼叫那個函式,如果有對應的函式就呼叫該函式,否則出現...