C 物件導向基礎 6 虛函式與多型

2022-10-09 21:18:22 字數 1144 閱讀 4907

非虛函式:常規的函式,在繼承時不希望子類重寫(override)

int objectid() const;

虛函式:前面加了關鍵字「virtual」的函式,在繼承時希望子類重寫,但已有預設定義

virtual void error(const std::string& msg);

純虛函式:前面加了關鍵字「virtual」的函式且後面有「=0」,繼承是子類一定要重寫,因為父類中沒有預設定義

virtual void draw() const = 0;

模板方法模式:基於繼承的基本**復用技術,在乙個邏輯演算法骨架中定義了乙個或多個抽象操作,將這些操作延遲到子類中實現。

虛函式就是實現template method的一種手段,如下圖例子:

cmydoc繼承了cdocument,在父類cdocument中onfileopen裡的serialize()方法沒有實現,而是在子類中採用虛函式實現的。

委託+繼承

問題描述:乙份資料有多種不同的呈現狀態,當資料改變時,每種呈現也相應改變,如使用者介面裡的多圖窗。

解決:乙個資料類subject,多個呈現類observer,subject類與observer類是委託關係,observer類可以被繼承,子類中實現具體的呈現方式

class subject

void set_val(int value)

void notify() // 通知所有observer更新資料

};class observer // 可以被繼承,具體在子類中實現

物件導向 多型(虛函式)

虛函式 用關鍵字virtual修飾的 類的成員函式 虛函式定義 語法形式 class x虛函式的意義 即虛函式的虛特徵 基類指標 或引用 指向 派生類的物件時,通過該指標 或引用 訪問派生類中的虛函式時,將呼叫該指標 或引用 實際所指物件的成員函式!指標和引用給基類的是派生類的位址 例子 class...

多型性與虛函式 物件導向程式設計

多型性 向不同的物件傳送同乙個訊息,不同的物件在接收時會產生不同 的行為。靜態多型性 由函式中在和運算子過載形成。動態多型性 通過虛函式實現。先建立乙個point類,包含資料成員x,y 座標點 以它為基類,派生出乙個circle 圓 類,增加資料成員r 半徑 再以circle類為直接基類,派生出乙個...

C 虛函式與多型

1.1 虛函式概念 1.定義 在乙個類的成員函式前面加上virtual關鍵字,則該函式就稱為虛函式。2.如果乙個函式不是類的成員函式,則該函式不能定義為虛函式。即就是類外面不能使用virtual關鍵字 1.2 純虛函式與抽象類 1.純虛函式 在虛函式的後面加上 0 virtual void disp...