龍生九子----多型 (轉)
龍生九子:namespace prefix = o ns = "urn:schemas--com::office" />
----多型
作者:HolyFire
一龍生九子,子子皆不同。這個道理說的是世界上沒有兩個或兩個以上的事物是完全相同的,事物之間有相同相似的一面,當然也有不同相異的一面。只有將不同的和相同的都考慮進來,才能完整的表達事物。
事物的屬性有著不同的一面。我們知道人感知事物的一個途徑是觀察,用對不同光線的反應來識別物體,所以我們給出事物的一個屬性,顏色。有時候一些物體的顏色是固定的,白色的雲,蔚藍的,碧綠的草地,不禁令人神遊太虛。
但有些方面是不確定的,有一句話說道:“月有陰晴圓缺,人有悲歡離合”,這句話還不足以說明這個道理。我們中文裡有時候會省略一些部分,“今天你吃了沒有?”吃的是什麼,“早飯”,“下午茶”,“麵包”,不知道。這裡將吃東西抽象化了,這句話可以在早上說,中午說,晚上說,任何一個適合的時間段都可以說。感興趣的地方出現了,我們不知道吃什麼東西,什麼時候吃,但是卻可以使用它,簡要的表達一下你的問候。這樣簡單的設下伏筆,在具體需要的環境才用具體表現出來具體的用法,被廣泛運用在生活中。“我砍!”表達了一個人要做的動作,具體砍什麼,只有感興趣的人才會去關注。“我生病了。”表達了一個人的狀態,具體生的什麼病,不是人人都想知道的。
多型--就是指事物不同的方面
多型是一種複雜的應用,要全面的闡述它很難,所以理解它的思想就成了重點。在不同情況下,秉承它的思想,用不同的方法實現多型。
還記得C++中的虛嗎,我在《後入為主----虛擬函式》中講過,虛擬函式可以動態改變,運用這個特性就能實現我們的目的了。不同的語言使用不同的方法,實現的機制就是一個型別提供的介面可以改變。這樣就能體現不同這個思想了。
為了更好理解,我們用C++實現一個例子。
我們知道,要生活,就要工作,工作是人的社會行為,幾乎人人都在工作。世界上有形形色色的人,人的工作的區分在什麼地方呢,那就是它的職業,不同職業的人做不同的事。
學生的工作就是學習,司機的工作是開車,小販的工作是賣商品,員的工作是編寫程式碼。
現在我們分析一下,世界上有很多人,人都要工作
人 { 工作 = 未確定 }
學生的工作是學習
學生 { 人 , 工作 = 學習 }
司機的工作是開車
司機 { 人 , 工作 = 開車 }
小販的工作是販賣
小販 { 人 , 工作 = 販賣 }
程式設計師的工作是
程式設計師 { 人 , 工作 = 程式設計 }
#include
unsing namespace std;
class Man{
public:
virtual void Work( void ) = 0;//純虛擬函式,沒有確定的職業就不知道他的工作。
};
class Student : public Man{
public:
void Work( void ) { cout << "I'm Learning."<< endl; };
};
class Chauffeur : public Man{
public:
void Work( void ) { cout << "I'm Driving."<< endl; };
};
class Vendor : public Man{
public:
void Work( void ) { cout << "I'm Vending."<< endl; };
};
class Programer : public Man{
public:
void Work( void ) { cout << "I'm Coding."<< endl; };
};
void main()
{
Man * which[5];
which[0] = new Student;
which[1] = new Chauffeur;
which[2] = new Vendor;
which[3] = new Programer;
which[4] = NULL;
for( int i = 0 ; which[i] ; i++ )
{
which[i]->Work();
delete which[i];
}
}
執行結果
I'm Learning. //虛擬函式表指標指向的Student的虛擬函式表
I'm Driving. //虛擬函式表指標指向的Chauffeur的虛擬函式表
I'm Vending. //虛擬函式表指標指向的Vendor的虛擬函式表
I'm Coding. //虛擬函式表指標指向的Programer的虛擬函式表
我們看到了由於使用了虛擬函式,類增加了虛擬函式表和虛擬函式表指標
which[0] = new Student;
我們分析這個指標,他指向一個Student,而這個指標描述的是一個Man物件,在Student物件被建立的時候虛擬函式表指標指向了Student的虛擬函式表,所以which[0]->Work();的是在Student的虛擬函式表裡查出來的Student::Work();其它的以此類推,不難得到執行的結果。
不同職業的類用同一個介面實現了不同功能,我們的目的達到了,程式碼很簡潔,意圖很明顯,這裡C++又一次很好的實現了物件導向的思想。
2001/8/17
丁寧
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990748/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 龍芯轉型:摘掉紅帽子,要建生態系統
- java多型-向上轉型和向下轉型Java多型
- 多型,向上向下轉型多型
- 多型中的轉型多型
- Java入門教程九(封裝繼承多型)Java封裝繼承多型
- 再談多型--多型的應用舉例: (轉)多型
- 淺談多型——概念描述 (轉)多型
- 多型性的論述 (轉)多型
- 策劃入門(九)遊戲測試方案的產生(轉)遊戲
- OC的多型(執行時)轉多型
- java中多型的理解——父類引用指向子類物件Java多型物件
- Kotlin教程(九)泛型Kotlin泛型
- 非生產系統如何完成精益轉型?
- Inspur KOS 龍蜥衍生版面向智慧新媒體轉型的探索與實踐 | 龍蜥案例
- 生態化轉型風口 首部ICT人才生態白皮書釋出
- 多型。多型
- 多型~多型
- 多型多型
- JAVA基礎之九-泛型(通用型別)Java泛型型別
- 龍創悅動iOS月收入排國內第九,“末日生存類”手游到底有多掙錢?iOS
- ORACLE產生隨機數的多種方法分享 轉Oracle隨機
- 九、生產者與消費者模式模式
- 數字化轉型背景下精益生產的思考
- 給電子學生的忠告:大學生需學的電子知識
- 內部類,類修飾符,上轉型物件,多型,介面回撥物件多型
- Java多型Java多型
- 多型一多型
- 11 #### 多型多型
- 多型性多型
- TDengine 簽約中船九院,助力航運業智慧化轉型升級
- C++虛擬函式與多型實戰 (轉)C++函式多型
- JAVA多型性<==>我和網友交流實錄 (轉)Java多型
- 電子遊戲互動簡史:從“電子玩具”到“第九藝術”遊戲
- 專案成功九要素(轉)
- HTML初學者指南(九)(轉)HTML
- eBPF 雙子座:天使 or 惡魔?| 龍蜥技術eBPF
- 電子行業藏龍臥虎牛人輩出行業
- 什麼是Java多型?如何實現Java多型?Java多型