多型分為靜態多型和動態多型。靜態多型分為函式過載和泛型程式設計。動態多型是通過虛函式來實現的。
靜態多型(叫靜態繫結或早繫結):編譯器在編譯期間完成的,,編譯器可以根據函式實參的型別(可能會進行隱式的型別轉換)注意:巨集不是靜態多型,巨集是在預處理階段完成的動態多型(又叫動態繫結或者晚繫結):在程式執行期間判斷所引用物件的實際型別根據其實際型別呼叫相應的方法。
動態繫結的條件
純虛函式:在成員函式的形參後面寫上=0,則成員函式為純虛函式。包含純虛函式的類叫做抽象類(也叫介面類)。抽象類不能例項化出物件。純虛函式在派生類中重新定義以後,派生類才能例項化出物件
重寫的概念:
協變:哪些函式不可以寫成虛函式?
1.建構函式 2.拷貝建構函式 3.靜態成員函式 4.友元函式 5.賦值運算子過載函式可以寫成虛函式,但是最好不要這麼做,使用的時候容易混淆
如果類中有虛函式。那麼最好將析構函式寫成虛函式。
若下**:
#include
using
namespace
std;
class base
;typedef
void (*pfun)();//定義乙個函式指標
void print( base b)
}int main()
除錯結果如下圖:
模擬以上的兩個 可以論證以上結論。
class b1
;class b2
;class c:public b1,public b2
;typedef
void (*pfun)();//定義乙個函式指標
void print()
cout
/列印b2虛表
以上結果證明:乙個類繼承了幾個帶有虛函式的類,則會有幾個虛表,而將自己特有的虛函式位址,放在第一張虛表上。
class b
virtual
void funtest2()
};class c:virtual b
virtual
void funtest3()
};int main()
如上述程式,若注釋了funtest3()則列印結果是16,反之則列印結果是20.故說明上述第乙個理論
c 基礎之 多型
c 物件導向的三大特徵 虛函式 是在基類中使用關鍵字 virtual 宣告的函式。在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式。我們想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被稱為動態鏈結,或後期繫結。多型是由虛函式實現的,而虛函式主要是通過...
C 基礎解析之 多型
今天繼續和大家一起 c 我們今天來聊聊c 中物件導向中乙個重要的特性 多型 簡單的一句話解釋多型 相同的方法呼叫可以實現不同的實現方式。通俗的說多型就是不同的表現形式,比如 中國人吃飯用筷子,歐洲以及北美都用刀叉,還有一些另類的人種直接上手,雖然他們的行為方式不同,但是他們有乙個目的就是吃飯!說白了...
c 基礎學習之多型
最近在看一本書 你必須知道的.net 書涵蓋的內容比較多,對於c net平台以往所學的零散東西有了慢慢的總結和新的認識。把一些程式設計客棧基礎的東西記錄於此。先說說多型吧 1.基類繼承式多型 如書中所說,基類繼承式多型的關鍵是繼承體系的設計與實現。書中舉了個簡單的列子 複製 如下 files myf...