一,多型的理論推導
1.型別相容性原則
在上一節的c++中的繼承中介紹了什麼是型別相容性原則。所謂的型別相容性原則是指子類公有繼承自父類時,包含了父類的所有屬性和方法,因此父類所能完成的功能,使用子類也可以替代完成,子類是一種特殊的父類。所以可以使用子類物件初始化父類物件,可以用父類指標指向子類物件,可以用父類引用來引用子類物件。
2.函式的重寫
函式的發生在類的繼承過程中,所謂的函式的重寫是指在繼承中,子類定義了與父類函式原型相同的函式,即定義了和父類中一樣的函式。
3.型別相容性原則遇上函式的重寫
# includeusing輸出結果:namespace
std;
/*定義父類
*/class
parent
};/*
定義子類繼承自父類,並重寫父類的print函式
*/class child :public
parent
};int
main()
4.型別相容性原則遇上函式的重寫的總結
5.靜態聯編和動態聯編
6.型別相容性原則和函式重寫所帶來的問題
7.針對上述問題的解決
針對上面的問題,c++提供了一套解決方案來實現上述我們的期望,通過使用virtual關鍵字來修飾被重寫的函式後,即可以實現我們上述的問題。
8.多型的**示例
# includeusing輸出結果:namespace
std;
/*定義父類
*/class
parent
};/*
定義子類繼承自父類,並重寫父類的print函式
*/class child :public
parent
};int
main()
9.多型案例的分析
10.多型成立的條件
二,多型的原理**
1.多型原理基礎知識
2.多型實現原理圖示
3.多型原理說明
4.vptr指標的存在證明
# includeusing輸出結果:namespace
std;
class
test1
};class
test2
};int
main()
我們發現含有虛函式的類的物件包含了4個位元組,說明存在乙個vptr指標,因為指標大小即4個位元組。
5.vptr指標的建立時機
vptr指標是在物件建構函式結束之後才建立的,然後指向虛函式表。
三,虛析構函式
1.虛析構函式的作用
當我們在開發父類的時候,通常會把父類的析構函式宣告為虛函式,因為在繼承中,當我們delete釋放記憶體的時候,子類的物件的析構函式不會去執行,我們需要將父類的析構函式顯式的宣告為虛函式才會讓子類的析構函式去呼叫執行。
2.案例演示
# includeusing四,函式的過載和重寫的區別1.函式的過載namespace
std;
class
myparent
/*父類的析構函式一般宣告為虛析構函式
*/virtual~myparent()
};class mychild:public
myparent
~mychild()
};int
main()
2.函式的重寫
C 中的多型
封裝 繼承 多型,物件導向的三大特性,前兩項理解相對容易,但要理解多型,特別是深入的了解,對於初學者而言可能就會有一定困難了。我一直認為學習oo的最好方法就是結合實踐,封裝 繼承在實際工作中的應用隨處可見,但多型呢?也許未必,可能不經意間用到也不會把它跟 多型 這個詞對應起來。在此拋磚引玉,大家討論...
C 中的多型
c 中的多型分為靜多型和動多型 也就是靜態繫結和動態繫結兩種現象 靜動的區別主要在於這種繫結發生在編譯期還是執行期,發生在編譯期的是靜態繫結,也就是靜多型 發生在執行期的則是動態繫結,也就是動多型。一 靜多型可以通過模板和函式過載來實現,下面舉兩個例子 1 函式模板 template t max c...
C 中的多型
定義 同樣的訊息被不同型別的物件接收時產生不同的行為。原理 1.編譯時多型 靜態繫結 2.執行時多型 動態繫結 分類 1.過載 包括函式過載,運算子過載 靜態繫結 2.覆蓋 包括子類和父類間虛函式 虛析構函式和純虛函式 動態繫結 要求 1.函式名相同 2.引數不同 栗子 include using ...