多型性(
polymorphisn
)是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類型別的指標賦值給父類型別的指標。多型包括靜態多型就是過載和動態多型覆蓋。這裡主要講動態多型。
c++多型性是通過
虛函式來實現的,虛函式允許子類重新定義成員函式,而子類重新定義父類的做法稱為
覆蓋(override)
,或者稱為
重寫。當子類重新定義了父類的虛函式後,父類指標根據賦給它的不同的子類指標,
動態(記住:是動態!)的呼叫屬於子類的該函式,這樣的函式呼叫在編譯期間是無法確定的(呼叫的子類的虛函式的位址無法給出)。因此,這樣的函式位址是在
執行期繫結的(
晚邦定)。多型與非多型的實質區別就是函式位址是早繫結還是晚繫結。如果函式的呼叫,在編譯器編譯期間就可以確定函式的呼叫位址,並生產**,是靜態的,就是說位址是早繫結的。而如果函式呼叫的位址不能在編譯器期間確定,需要在執行時才確定,這就屬於晚繫結。
那麼,多型的作用是什麼呢?我們知道,封裝可以隱藏實現細節,使得**模組化;繼承可以擴充套件已存在的**模組(類);它們的目的都是為了——**重用。而多型則是為了實現另乙個目的——介面重用!多型的作用,就是為了類在繼承和派生的時候,保證使用「家譜」中任一類的例項的某一屬性時的正確呼叫。
多型在物件導向程式設計的時候是怎樣實現的呢?最常見的用法就是宣告
基類的指標
,利用該指標指向任意乙個
子類物件
,呼叫相應的虛函式,可以根據指向的子類的不同而實現不同的方法。如果沒有使用虛函式的話,即沒有利用
c++多型性,則利用基類指標呼叫相應的函式的時候,將總被限制在基類函式本身,而無法呼叫到子類中被重寫過的函式。因為沒有多型性,函式呼叫的位址將是一定的,而固定的位址將始終呼叫到同乙個函式,這就無法實現乙個介面,多種方法的目的了。
C 多型特性
編譯時多型性 靜態多型 通過過載函式實現 函式過載條件 形參的個數或資料型別不同 執行時多型性 動態多型 通過虛函式實現 產生多型條件 1 指向子類的基類指標2有 virtual 修飾的函式 3通過指標呼叫相應的虛函式 派生類的函式 遮蔽了與其同名的基類函式 如果派生類的函式與基類的函式同名,但是引...
C 特性之多型
今天學習了一下多型的有關知識。在 c primer 書中,多型特性似乎只在書的後半部分 oo 裡面提到。雖然是物件導向中很重要的乙個概念,但是並未單獨開出乙個章節來介紹。網上找了一些多型的介紹和程式,總結如下 其底層含義是大記憶體 父類 中套著許多小記憶體 子類 父類 class animal 子類...
C 特性之多型
同乙個方法在派生類和基類中的不同行為稱為多中形態,簡稱多型。換句話來說,就是方法的行為應取決於呼叫該方法的物件。1.多型構成的條件 下面為大家解釋一下什麼是虛函式,以及虛函式的重寫 簡單來說,就是被virtual關鍵字修飾的類的成員函式 在虛函式宣告的後邊加上 0 表示該虛函式為純虛函式,派生類繼承...