物件导向:多载==多型『?


 

资料来源: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

这样方便的能力就叫做多载。

或者你可以把多载想像成:利用不同的参数去叫用功能不同但名称一样的函式。

 

最简单的比较就是,

用 参数 控制函式行为的,就叫
多载

用 类别 控制函式行为的,就叫
多型

当然,更复杂更精确的说法,请自行再参阅相关书籍啰。

 

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


 


相关文章