物件導向:多載==多型『?』
物件導向:多載==多型『?』
資料來源: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。
這樣方便的能力就叫做多載。
或者你可以把 “多載” 想像成:利用不同的參數去叫用功能不同但名稱一樣的函式。
最簡單的比較就是,
用 參數 控制函式行為的,就叫
“多載“。
用 類別 控制函式行為的,就叫
“多型“。
當然,更複雜更精確的說法,請自行再參閱相關書籍囉。
希望有回答到你的疑惑 : )