多型:指相同物件收到不同訊息或者不同物件收到相同訊息時產生不同的動作。
總的來說分為:
靜態多型(早繫結)
例如定義如下的 rect 類,在clcarea() 中傳入不同形式引數會呼叫不同的函式。
函式呼叫在程式執行前就準備好了。有時候這也被稱為早繫結。
#ifndef polymorphism_rect_h
#define polymorphism_rect_h
class rect
;#endif //polymorphism_rect_h
動態多型(晚繫結)
例如下面的三個類:
class shape
;class rect : public shape
;class circle : public shape
;
//部分函式實現
double shape:
:clcarea()
double rect:
:clcarea()
double circle:
:clcarea()
主函式
#include
#include
"rect.h"
#include
"circle.h"
using namespace std;
intmain()
當使用父類指向子類時候,如果呼叫clcarea()函式時,如果,父類的clcarea() 函式不加 virtual 關鍵字,則會出現下面的效果:
會發現只執行了父類的成員函式,只有給父類的 clcarea() 加上virtual關鍵字才會執行子類的相應函式。子類相應函式可加可不加(最好加上)。
虛析構函式
上面的例子還有乙個問題,就是在使用析構函式時,可以發現只呼叫的父類的析構函式,並沒有執行子類的析構,但是卻呼叫了子類的建構函式。這樣就會出現記憶體洩漏的問題。例如在子類的建構函式中需要為自己的成員變數申請記憶體,那麼在析構就會出現記憶體洩漏。
加上virtual 後的效果
virtual在函式中的使用限制
普通函式不能是虛函式。
靜態成員函式不能是虛函式。
內聯函式不能是虛函式。
建構函式不能是虛函式。
虛函式實現原理 (to do…)
文章參考:慕課網c++遠征系列。
C 極簡總結 模板 一
模板把函式或類要處理的資料型別引數化,表現為引數的多型性。模板也是一種 的重用機制。分為函式模板和類模板 函式模板 函式模板的定義格式如下 template 模板參數列 返回值型別 函式名 參數列 include include using namespace std template t squa...
c 極簡總結 STL deque
deque usually pronounced like deck is an irregular acronym of double ended queue 雙端陣列,可以對頭端和尾端進行插入刪除操作。1 deque與vector的頭插速度 2 deque 內部中控器 deque 內部有個中控器...
C 極簡總結 I O 流類庫(一)
在c 的輸入輸出系統中,最核心的是流 stream 流的操作包括對流的讀和寫。1 流類庫 c 將與輸入輸出有關的操作定義為乙個類體系,並將其放在乙個系統庫里,以備使用者呼叫。這個執行輸入和輸出操作的類體系就叫流類,實現流類的庫就是流類庫。流類庫的基本結構 類是istream類和ostream類的虛基...