原來多型是這樣子的!

2021-04-15 17:48:50 字數 1605 閱讀 5454

多型

什麼是多型(polymorphi**)?按字面的意思就是「多種形狀」。引用charlie calverts對多型的描述——多

態性是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前

賦值給它的子物件的特性以不同的方式運作(摘自「delphi4 程式設計技術內幕」)。簡單的說,就是一句

話:允許將子類型別的指標賦值給父類型別的指標。多型性在object pascal和c++中都是通過虛函式

(virtual function) 實現的。

多型性是允許將父物件設定成為和乙個和多個它的子物件相等的技術,比如parent:=child;

賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。也就是說,父親的行為像兒

子,而不是兒子的行為像父親。

舉個例子:從乙個基類中派生,響應乙個虛命令,產生不同的結果。

比如從某個基類繼承出多個物件,其基類有乙個虛方法tdoit,然後其子類也有這個方法,但行為不同,然

後這些子物件中的任何乙個可以附給其基類的物件,這樣其基類的物件就可以執行不同的操作了。實際上你

是在通過其基類來訪問其子物件的,你要做的就是乙個賦值操作。

使用繼承性的結果就是可以建立乙個類的家族,在認識這個類的家族時,就是把匯出類的物件 當作基類的

的物件,這種認識又叫作upcasting。這樣認識的重要性在於:我們可以只針對基類寫出一段程式,但它

可以適 應於這個類的家族,因為編譯器會自動就找出合適的物件來執行操作。這種現象又稱為多型性。而

實現 多型性的手段又叫稱動態聯編(dynamic binding)。

簡單的說,建立乙個父類的變數,它的內容可以是這個父類的,也可以是它的子類的,當子類擁有和父類同

樣的函式,當使用這個變數呼叫這個函式的時候,定義這個變數的類,也就是父類,裡的同名函式將被調

用,當在父類裡的這個函式前加virtual關鍵字,那麼子類的同名函式將被呼叫

class a

virtual void foo()

};class b : public a

void foo()

};int main(int argc, char* argv)

這將顯示:

this is b.

如果把virtual去掉,將顯示:

this is a.

回頭想想,當初也使用過多型這個特性,最常見的employee, manager, secretary

#include

using namespace::std;

class employee

virtual void print(){}

};class manager : public employee

void print()

};class secretary : public employee

void print()

};

int main()

}

輸出:

this is manager

this is secretary

請按任意鍵繼續. . .

原來 程式設計的基礎是這樣子的

隨著蘋果的一系列產品的橫空出世,引來了不少果粉的大肆追捧,更有甚者,賣腎買iphone,這不免有些讓蘋果簡單的設計理念蒙上了一絲灰影。那麼為什麼我們會這樣熱愛蘋果的產品呢,良好的使用者體驗,這應該是果粉的一致認同。想想蘋果的系列產品到底是怎樣生成的呢,看了 objective c 程式設計 第4版 ...

原來DDD就是這樣子的

今天在infoq上看到一篇文章 領域驅動設計和開發實戰 url 其中部分內容如下 quote 從專案管理的觀點來看,真實的ddd實現專案和其它軟體開發專案所包含的階段是一樣的。這些階段包括 對領域進行建模 設計 開發 單元測試和整合測試 基於設計和開發來完善 重構領域模型 模型概念的持續整合 ci ...

for迴圈原來是這樣

for迴圈可以說是程式中最靈活,最常用,最重要的乙個迴圈用法,大家經常用到,但是你真正理解for迴圈的執行原理嗎?舉個例子 for i 0 i 8 i 對於這個語句執行結束的時候 i 是多少?經常用,卻沒怎麼注意,執行結束的時候 i 是8 下面說一下for迴圈語句的執行過程 for 表示式1 表示式...