C 多型實現

2021-09-27 02:34:11 字數 1155 閱讀 9097

多型

多型的含義為 乙個事物的多種形態,在c++程式設計張,多型性是指具有不同功能的函式可以用同乙個函式名,這樣就可以用乙個函式名呼叫不同內容的函式。 一般多型分為兩種

1)靜態多型

也成為編譯多型,主要包括引數多型,過載多型強制多型。

引數多型:採用引數化模板,通過給出不同的型別引數,使的乙個結構有多種型別。如c++語言中的函式模板和類模板。如 c++語言中的函式模板和類模板屬於引數多型。引數多型又叫靜態多型,它的執行速度快,異常少,呼叫在編譯時已經確定。過載多型:同乙個名字在不同的上下文中所代表的含義不同。典型的例子是運算子過載和函式過載。強制多型:編譯程式通過語義操作,把操作物件的型別強行加以變換,以符合函式或操作符的要求。程式語言中基本型別的大多數操作符,在發生不同型別的資料進行混合運算時,編譯程式一般都會進行強制多型。程式設計師也可以顯示地進行強制多型的操作。如 int+double,編譯系統一般會把 int 轉換為 double,然後執行 double+double 運算,這個int->double 的轉換,就實現了強制多型,即可是隱式的,也可顯式轉換。強制多型屬於靜態多型。

2)動態多型

也稱執行時多型

主要包括:包含多型。包含多型的基礎是虛函式。主要是通過類的繼承和虛函式來實現,當基類和子類擁有同名同參同返回的方法,且該方法宣告為虛方法,當基類物件,指標,引用指向的是派生類的物件的時候,基類物件,指標,引用在呼叫基類的方法,實際上呼叫的是派生類方法。

靜態多型實現

靜態多型靠編譯器來實現,簡單來說就是編譯器對原來的函式名進行修飾。可以根據函式引數的型別,個數,以及修飾函式const,這就使得函式可以過載。同理,模板也是可以實現的,針對不同型別的實參來產生對應的特化的函式,通過增加修飾,使得不同的型別引數的函式得以區分。

動態多型的實現

動態多型靠執行時的型別檢查,從而來進行函式的繫結。宣告乙個類時,如果類中有虛方法,則自動在類中增加乙個虛函式指標,該指標指向的是乙個虛函式表,虛函式表中存著每個虛函式真正對應的函式位址。動態多型採用一種延遲繫結技術,普通的函式呼叫,在編譯期間就已經確定了呼叫的函式的位址,所以無論怎樣呼叫,總是那個函式,但是擁有虛函式的類,在呼叫虛函式時,首先去查虛函式表,然後在確定呼叫的是哪乙個函式,所以,呼叫的函式是在執行時才會確定的。

C 實現多型

多型 就是指不同物件收到相同訊息是,會產生不同行為,同乙個類在不同的場合下表現出不同的行為特徵 多型的作用 把不同的子類物件都當做父類來看,可以遮蔽不同子類物件之間的差異,寫出通用的 做出通用的程式設計,以適應需求的不斷變化。實現多型有三種形式 虛方法抽象類介面 下面,使用虛方法,簡單實現多型效果 ...

C 多型實現原理

用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。多型用虛函式來實現,結合動態繫結...

C 多型的實現

封裝 繼承 多型,物件導向的三大特性,前兩項理解相對容易,但要理解多型,特別是深入的了解,對於初學者而言可能就會有一定困難了。我一直認為學習oo的最好方法就是結合實踐,封裝 繼承在實際工作中的應用隨處可見,但多型呢?也許未必,可能不經意間用到也不會把它跟 多型 這個詞對應起來。在此拋磚引玉,大家討論...