Item 35 考慮虛函式的替代者

2021-05-25 14:30:22 字數 401 閱讀 9753

● nvi: non-virtual inte***ce

nvi的優點:用乙個不能被子類重定義的函式,做一些預處理、後處理。比如:互斥鎖、日誌、驗證約束條件,等等。

● 函式指標

優先:物件例項和派生類物件,可使用各種實現,也可在執行時隨意改變。

缺點:函式只能訪問類內部的公有成員。這是一種隱患:可能以後需要訪問私有成員,那麼只有弱化類的封裝。比如,把函式宣告為友元;為私有成員提供訪問函式。

● tr1::function比上面的函式指標更靈活、限制更少:

1> 返回值不一定是int,與其相容即可

2> 可以是function物件

3> 可以是類的成員函式

● strategy模式

優點:只要熟悉這個模式,就可以隨時新增新演算法。

條款35 考慮虛函式以外的其他選擇

我們考慮下面這個問題 假設我們在開發一款遊戲,遊戲中有不同的角色,每個角色有自己的生命值的初始值,生命值的計算方法等等。你會怎麼設計這個類呢?我們很自然的就會想到 class gamecharacter 就是說基類裡定義了乙個計算生命值的函式,派生類通過重新定義這個函式來完成不同型別的角色的生命值的...

35 虛函式與多型(二)

虛函式是實現多型性的前提需要在基類中定義共同的介面 介面要定義為虛函式 如果基類的介面沒辦法實現 如形狀類shape 解決辦法 將這些介面定義為純虛函式 定義純虛函式 class 類名 純虛函式不需要實現 include include using namespace std class shape...

條款35 考慮virtual函式以外的其他選擇

大多時候,我們會自然而然的想到使用virtual手法來塑模現實中的類。但是,實際上也有別的方案可以替代virtual手法的,即 考慮virtual函式以外的其他選擇。下面介紹的便是幾種可以替代virtual的方案。1 non virtual inte ce 是template method 設計模式...