物件導向:多載==多型『?


 

資料來源:http://www.programmer-club.com.tw/showSameTitleN/vc/20877.html

 

試著這樣比喻

 

一個喇叭是一個樂器.

所以你可以寫:

class 樂器

{

protected:

CString 名稱;

public:

virtual CString
Play( );

};

然後讓

class 喇叭 :
public
樂器;

class 揚琴 :
public
樂器;

 

因為每一種樂器都有他自己的演奏方式和聲音

(你總不能一支喇叭或
一支揚琴吧?)

generally 來說,他們都可以被演奏“,

當你要叫旗下樂團開始演奏時,

你只要用一個很共通的 p樂器->Play( ) 指令便能達成目的。

程式會自動替你叫用屬於該衍生類別的演湊方式,

這種能力就叫多型。

或者你可以先初步將多型想像成:

用父類別去訂出大家共通的介面,然後在子類別實作各自獨特的功能。

 

至於多載,那和父類別、子類別一點關係也沒有。

以多載函式為例,

他只是單純擴充既有介面的功能罷了。

舉例而言,

以下二個函式都是負責把參數1和參數2做相加。

bool AddInt( int a, int b );

bool AddFloat( float a, float b );

user 來說,

同樣的動作卻要記二個函式的名字,好煩啊!

如果改寫成以下這樣:

bool Add( int a, int b );

bool Add( float a,
float b );

那麼 user 不管自己要加的是什麼,只要記得加法就是通通呼叫 Add() 就好。

程式會自動判斷要套用那一個函式來回應
user

這樣方便的能力就叫做多載。

或者你可以把多載想像成:利用不同的參數去叫用功能不同但名稱一樣的函式。

 

最簡單的比較就是,

用 參數 控制函式行為的,就叫
多載

用 類別 控制函式行為的,就叫
多型

當然,更複雜更精確的說法,請自行再參閱相關書籍囉。

 

希望有回答到你的疑惑 : )


 


相關文章