c 如何使用抽象和多型

2021-05-25 07:15:58 字數 1325 閱讀 1759

虛建構函式與prototype模式
建構函式是不能虛的,而這裡指的是具有這樣功能的函式。如在乙個類中,我們使用乙個virtual成員函式clone來呼叫複製建構函式new x(*this)。

clone函式實際上是一種專門型別的factory method模式,它製造了乙個適當的產品,同時允許呼叫**對上下文和產品型別的精確型別保持不知情。

有兩個主要的原因需要使用「轉殖」:

你必須對正在處理的物件的精確型別保持「不知情」,並且不希望改變被轉殖的原始物件,也不希望受原始物件改變的影響。

不過有一點是很明確的,軟體設計的「不知情」模式有一些優點,尤其是在用於定製和擴充套件的框架結構設計中;因為有些事情,你知道的越少越好!

factory method模式

乙個高階設計師通常要求基於乙個現有物件型別來建立乙個「適當」型別的物件。

乙個常見的,但總是錯誤的方式是使用「型別編碼」和switch語句。

正確的方式是去考慮從每一種現有物件型別到要建立的物件型別的對映應該如何處置。

換句話說,誰最清楚現有的物件型別需要建立何種型別的物件,當然是現有物件本身。所以把建立**放在現有物件內。

fctorymethod模式的本質在於,基類提供乙個虛函式掛鉤,用於產生適當的「產品」。每乙個派生類可以重寫繼承的虛函式,為自己產生適當的產品。實際上我們具備了使用乙個未知型別的物件產生另乙個未知型別的物件的能力。

使用fctorymethod模式通常意味著乙個高階設計需要基於乙個物件的確切型別產生另乙個「適當」的物件,這樣的需要往往發生於存在多個平行或幾乎平行的類層次結構的情況下。

fctorymethod模式通常是**一系列執行期型別查詢問題的良方。

協變返回型別

一般來說,乙個重寫函式與被它重寫的函式必須具有相同的返回型別;協變返回機制是,如果 d 類公有繼承於 b 類,

那麼基類虛函式的返回型別是 b 的指標(或者 b 的引用),繼承類的重寫該派生類函式的返回型別可以是 d 的指標(或者 d 的引用)。

協變的優勢在於,總是可以在適當程度的抽象層工作。如果我們是處理shape,獲得乙個抽象的shapeeditor;如果在處理某種具體的形狀型別,比如circle,我們就可以直接獲

得circleeditor。

協變機制使得我們可以不使用型別轉換操作來「重新」提供型別資訊,而這種資訊是一開始就不應該丟掉的。

在ibm的online文件中,有乙個很好的例子,說明了協變。

參考這頁最後乙個例子。

多型和抽象

多型就是指 相同的行為不同的實現 特指方法 理解多型 1.靜態多型 編譯期,系統就能決定呼叫哪個方法 通過過載實現 2.動態多型 執行期,系統才能確定動態方法所指的物件 使用動態繫結和重寫實現 注 多型中大量用到動態多型。多型的技術基礎 1.向上轉型技術 子轉父 用到動態繫結技術 執行時根據父類引用...

多型和抽象

經過一天的學習我們需要掌握以下幾點。一 什麼是多型。乙個物件有多種形式的能力乙個類的子類可以定義他們唯一的行動,同時共享父類的某次寫相同特徵。二 了解多型之前需要了解幾個繼承技術。1向上轉型技術 2instaceof關鍵字 3動態繫結技術。三 動態繫結。將乙個方法呼叫與該方法所在的類關聯起立。四 什...

多型和抽象

乙個物件有多重形式的能力,相同的行為不同的實現。乙個介面,多種實現 編譯時系統決定呼叫哪個方法 通過方法的過載實現 方法的過載滿足相同的行為不同的實現 單獨的重寫也是靜態多型 過載1.過載只能通過不同的方法引數來區分。例如不同的引數型別,不同的引數個數,不同的引數順序。2.不能通過訪問許可權 返回型...