**:
多型性是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說:允許將子類型別的指標賦值給父類型別的指標(乙個介面,多種方法)。c++ 支援兩種多型性:編譯時多型性,執行時多型性。
a、編譯時多型性(靜態多型):通過過載函式實現
b、執行時多型性(動態多型):通過虛函式實現。
那麼多型的作用是什麼呢,封裝可以使得**模組化,繼承可以擴充套件已存在的**,他們的目的都是為了**重用。而多型的目的則是為了介面重用。也就是說,不論傳遞過來的究竟是那個類的物件,函式都能夠通過同乙個介面呼叫到適應各自物件的實現方法。執行時多型:
最常見的用法就是宣告基類的指標,利用該指標指向任意乙個子類物件,呼叫相應的虛函式,可以根據指向的子類的不同而實現不同的方法。如果沒有使用虛函式的話,則利用基類指標呼叫相應的函式的時候,將總被限制在基類函式本身,而無法呼叫到子類中被重寫過的函式。因為沒有多型性,函式呼叫的位址將是一定的,而固定的位址將始終呼叫到同乙個函式,這就無法實現乙個介面,多種方法的目的了。非執行時多型:
通過函式過載實現簡而言之:
有virtual才可能發生動態多型現象
(無virtual)呼叫就按原型別呼叫
隱藏是指派生類的函式遮蔽了與其同名的基類函式,規則如下:
虛函式:就是允許被其子類重新定義的成員函式,子類重新定義父類虛函式的做法,可實現成員函式的動態覆蓋(override)。
純虛函式:是在基類中宣告的虛函式,它在基類中沒有定義,但要求任何派生類都要定義自己的實現方法。在基類中實現純虛函式的方法是在函式原型後加「=0」
virtual void funtion()=0
抽象類:包含純虛函式的類稱為抽象類。由於抽象類包含了沒有定義的純虛函式,所以不能進行例項化。
純虛函式的作用:
為了方便使用多型特性,我們常常需要在基類中定義虛函式。
在很多情況下,基類本身生成物件是不合情理的。例如,動物作為乙個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。
為了解決上述問題,引入了純虛函式的概念,將函式定義為純虛函式(方法:virtual returntype function()= 0;
),則編譯器要求在派生類中必須予以重寫以實現多型性。同時含有純虛函式的類稱為抽象類,它不能生成物件。這樣就很好地解決了上述兩個問題。
示例**:
#includeusing namespace std;
//基類物件
class base
C 三大特性之多型
c 的三大特性,封裝,繼承,多型。封裝可以使得 模組化,繼承可以擴充套件已存在的 而多型的目的則是為了介面重用。本篇部落格主要介紹c 中多型的相關概念及使用方法。多型性是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡...
C 三大特性之多型(詳細)
c 特性詳解 c 分為三大特性 封裝 繼承 多型 封裝 類是物件導向程式設計語言中的乙個概念。類是對某個物件的定義。包含有關物件動作方式的資訊,包括它的名稱 方法 屬性和事件。封裝的類有如下的訪問型別 1 公有 public 成員可以在類外訪問 2 私有 private 成員只能被該類的成員函式訪問...
C 三大特性 封裝,繼承,多型
c 三大特性 封裝,繼承,多型 封裝 定義 封裝就是將抽象得到的資料和行為相結合,形成乙個有機的整體,也就是將資料與運算元據的源 進行有機的結合,形成類,其中資料和函式都是類的成員,目的在於將物件的使用者和設計者分開,以提高軟體的可維護性和可修改性 特性 1.結合性,即是將屬性和方法結合 2.資訊隱...