物件导向:多载==多型『?』
资料来源: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。
这样方便的能力就叫做多载。
或者你可以把 “多载” 想像成:利用不同的参数去叫用功能不同但名称一样的函式。
最简单的比较就是,
用 参数 控制函式行为的,就叫
“多载“。
用 类别 控制函式行为的,就叫
“多型“。
当然,更复杂更精确的说法,请自行再参阅相关书籍啰。
希望有回答到你的疑惑 : )