C 的多型總結 靜態 動態

2022-07-03 14:42:13 字數 744 閱讀 2824

顧名思義就是同乙個事物在不同場景下的多種形態。

我們以前說過的函式過載就是乙個簡單的靜態多型,靜態多型是編譯器在編譯期間完成的,編譯器會根據實參型別來選擇呼叫合適的函式,如果有合適的函式可以呼叫就調,沒有的話就會發出警告或者報錯。

動態多型:它是在程式執行時根據基類的引用(指標)指向的物件來確定自己具體該呼叫哪乙個類的虛函式。

基類中必須包含虛函式,並且派生類中一定要對基類中的虛函式進行重寫。

通過基類物件的指標或者引用呼叫虛函式,因為派生類對基類中的虛函式進行重寫,使用派生類的虛函式替換相同偏移量位置的基類虛函式,如果派生類中新增加自己的虛函式,按照其在派生類中的宣告次序,放在上述虛函式之後 。

重寫 :

(a)基類中將被重寫的函式必須為虛函式(上面的檢測用例已經證實過了)

(b)基類和派生類中虛函式的原型必須保持一致(返回值型別,函式名稱以及引數列表),協變和析構函式(基類和派生類的析構函式是不一樣的)除外

(c)訪問限定符可以不同

那麼問題又來了,什麼是協變?

協變:基類(或者派生類)的虛函式返回基類(派生類)的指標(引用)

總結一道面試題:那些函式不能定義為虛函式?

1)友元函式,它不是類的成員函式

2)全域性函式

3)靜態成員函式,它沒有this指標

4)建構函式,拷貝建構函式,以及賦值運算子過載(可以但是一般不建議作為虛函式)

降低了程式執行效率(多型需要去找虛表的位址)

空間浪費(需要建立虛表,浪費空間)

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

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

C 靜態多型與動態多型

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

C 動態多型與靜態多型

c 中有兩種多型 動多型 執行期多型 和靜多型 編譯期多型 而靜多型主要通過模板來實現,巨集也是實現靜多型的一種途徑。模板不採用虛函式機制,所以所有呼叫在編譯期就可確定,因此它是靜態的。基於繼承和虛函式,多型的設計思想主要在於 對於幾個相關物件的型別,確定它們之間的乙個共同功能集 然後在基類中,把這...