C 的多型特性

2021-06-21 13:59:23 字數 1118 閱讀 7575



多型性(

polymorphisn

)是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類型別的指標賦值給父類型別的指標。多型包括靜態多型就是過載和動態多型覆蓋。這裡主要講動態多型。

c++多型性是通過

虛函式來實現的,虛函式允許子類重新定義成員函式,而子類重新定義父類的做法稱為

覆蓋(override)

,或者稱為

重寫。當子類重新定義了父類的虛函式後,父類指標根據賦給它的不同的子類指標,

動態(記住:是動態!)的呼叫屬於子類的該函式,這樣的函式呼叫在編譯期間是無法確定的(呼叫的子類的虛函式的位址無法給出)。因此,這樣的函式位址是在

執行期繫結的(

晚邦定)。多型與非多型的實質區別就是函式位址是早繫結還是晚繫結。如果函式的呼叫,在編譯器編譯期間就可以確定函式的呼叫位址,並生產**,是靜態的,就是說位址是早繫結的。而如果函式呼叫的位址不能在編譯器期間確定,需要在執行時才確定,這就屬於晚繫結。

那麼,多型的作用是什麼呢?我們知道,封裝可以隱藏實現細節,使得**模組化;繼承可以擴充套件已存在的**模組(類);它們的目的都是為了——**重用。而多型則是為了實現另乙個目的——介面重用!多型的作用,就是為了類在繼承和派生的時候,保證使用「家譜」中任一類的例項的某一屬性時的正確呼叫。

多型在物件導向程式設計的時候是怎樣實現的呢?最常見的用法就是宣告

基類的指標

,利用該指標指向任意乙個

子類物件

,呼叫相應的虛函式,可以根據指向的子類的不同而實現不同的方法。如果沒有使用虛函式的話,即沒有利用

c++多型性,則利用基類指標呼叫相應的函式的時候,將總被限制在基類函式本身,而無法呼叫到子類中被重寫過的函式。因為沒有多型性,函式呼叫的位址將是一定的,而固定的位址將始終呼叫到同乙個函式,這就無法實現乙個介面,多種方法的目的了。

C 多型特性

編譯時多型性 靜態多型 通過過載函式實現 函式過載條件 形參的個數或資料型別不同 執行時多型性 動態多型 通過虛函式實現 產生多型條件 1 指向子類的基類指標2有 virtual 修飾的函式 3通過指標呼叫相應的虛函式 派生類的函式 遮蔽了與其同名的基類函式 如果派生類的函式與基類的函式同名,但是引...

C 特性之多型

今天學習了一下多型的有關知識。在 c primer 書中,多型特性似乎只在書的後半部分 oo 裡面提到。雖然是物件導向中很重要的乙個概念,但是並未單獨開出乙個章節來介紹。網上找了一些多型的介紹和程式,總結如下 其底層含義是大記憶體 父類 中套著許多小記憶體 子類 父類 class animal 子類...

C 特性之多型

同乙個方法在派生類和基類中的不同行為稱為多中形態,簡稱多型。換句話來說,就是方法的行為應取決於呼叫該方法的物件。1.多型構成的條件 下面為大家解釋一下什麼是虛函式,以及虛函式的重寫 簡單來說,就是被virtual關鍵字修飾的類的成員函式 在虛函式宣告的後邊加上 0 表示該虛函式為純虛函式,派生類繼承...