討論區快速選單
知識庫快速選單
程式設計俱樂部Facebook粉絲團 掌握Salesforce雲端管理秘訣
[ 回上頁 ] [ 討論區發言規則 ]
多載=多形?
更改我的閱讀文章字型大小
作者 : sim0831(翔) 人氣指數超過10000點
[ 貼文 134 | 人氣 18127 | 評價 260 | 評價/貼文 1.94 | 送出評價 11 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/2 上午 01:45:46
最近看書看到物件導向那一篇
,看到頭都快暈倒了><
"請問一下,物件導向中的多形,
跟多載的意思相同嘛?
是不是都是相同函式名稱,依照帶入參數的不同,
而執行不同的函式內容?
作者 : neville(福寶)
[ 貼文 111 | 人氣 1806 | 評價 310 | 評價/貼文 2.79 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/2 上午 01:50:09
不同..你指的是函式多載...關於多載,還有許多不同的形式與細節.
至於多形.你可以由 virtual 這個關鍵字開始了解.
作者 : arcelab(阿傑) 貼文超過200則人氣指數超過10000點
[ 貼文 283 | 人氣 13358 | 評價 650 | 評價/貼文 2.3 | 送出評價 13 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人sim0831註記此篇回應為最佳解答 2005/5/2 上午 09:23:47
阿傑試著這樣比喻...

一個喇叭是一個樂器.
所以你可以寫:
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。
這樣方便的能力就叫做多載。
或者你可以把 "多載" 想像成:利用不同的參數去叫用功能不同但名稱一樣的函式。

最簡單的比較就是,
用 參數 控制函式行為的,就叫 "多載"。
用 類別 控制函式行為的,就叫 "多型"。
當然,更複雜更精確的說法,請自行再參閱相關書籍囉。

希望有回答到你的疑惑 : )
作者 : sim0831(翔) 人氣指數超過10000點
[ 貼文 134 | 人氣 18127 | 評價 260 | 評價/貼文 1.94 | 送出評價 11 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/2 下午 04:28:34
謝謝!
聽了您的回答之後,
本人茅塞頓開!

PS:目前被物件中的運算子多載搞的頭昏眼花,繼續努力中@@!!
作者 : arcelab(阿傑) 貼文超過200則人氣指數超過10000點
[ 貼文 283 | 人氣 13358 | 評價 650 | 評價/貼文 2.3 | 送出評價 13 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/5/3 上午 09:06:54
運算子多載其實有一定的思路,
像我是從 operator= 開始寫起的.
範例是選 c++核心語言 (歐萊禮) 的書來看,
他從四個方向來分列寫 operator= 的思考順序,
從 1. 先檢查是不是 A=A,
到 4. 回傳 Obj& 使 = 具有 a=b=c=d... 的傳遞性.
這樣的分析,
我覺得還算不錯 :)

僅供參考囉.
 板主 : 青衫 , Raymond
 > Visual C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Visual C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Visual C++
1 青衫 11070 
2 Raymond 10090 
3 Clier 7630 
4 小約翰 2500 
5 Cog 2030 
6 coco 1870 
7 aming 1410 
8 牧童哥 1400 
9 r2109 1380 
10 Akira 1350 
Visual C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.140625