討論區快速選單
知識庫快速選單
軟實力課程1+1,第二科享5折優惠 網路投保旅行平安險 傑米的攝影旅遊筆記
[ 回上頁 ] [ 討論區發言規則 ]
Overload算是Polymorphism的機制嗎???
更改我的閱讀文章字型大小
作者 : g7ff13(吉)
[ 貼文 19 | 人氣 7043 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/8/25 下午 02:44:02
我個人認為不是,但又不知怎麼去證明?大家可以給我一些意見嗎?
作者 : marlon(marlon) C#卓越專家貼文超過200則
[ 貼文 495 | 人氣 1886 | 評價 3510 | 評價/貼文 7.09 | 送出評價 4 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/8/25 下午 06:13:48
Polymorphism 可分為 run time 與 design time,
virtual function 屬於 run time, 同一個 base 物件參考執行相同的函式結果會不一樣, coding 時無法預測那一個類別的 function 被執行, 要視 run time 參考的類別的繼承表而定
overload 屬於 design time, 相同的函式名稱可以傳遞不一樣的參數數目或型態, coding 時就會依參數自動選取對應的 function
作者 : g7ff13(吉)
[ 貼文 19 | 人氣 7043 | 評價 0 | 評價/貼文 0 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2008/8/27 上午 10:14:54
所以marlon大大認為overload是Polymorphism是機制嘍!
作者 : cancle(笨毛) 貼文超過200則
[ 貼文 276 | 人氣 2885 | 評價 830 | 評價/貼文 3.01 | 送出評價 12 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/3 下午 02:35:58
沒有 overload 就沒有 Polymorphism

應該說 就做不出 多型

多型是概念覆載是實際上的方式

在 subclass 實作 overload 後
才能展現出 多型

如果要 "算是" 機制的話 到是 有點淺了
要說 "根本" 就是 多型的實作方法
作者 : programmer328(難玩)
[ 貼文 61 | 人氣 0 | 評價 570 | 評價/貼文 9.34 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/4 上午 10:58:09
OO 的題目,我非常喜歡.但看了很多討論區.多多少少都有討論,但都不多.
你們有沒有Overload Polymorphism 多型的實際範例,提供一下.(實際的,不是教科書那種為了Demo而寫的抽象範例).
作者 : cancle(笨毛) 貼文超過200則
[ 貼文 276 | 人氣 2885 | 評價 830 | 評價/貼文 3.01 | 送出評價 12 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/4 上午 11:44:52
這個 在 C++ 那邊有貼過.. 先看看.. 懂的話 在貼別的

CuSocketFile 繼承 CuFile
CuSocketFile 使用 CuSocket
CuFile <<-- CuSocketFile -> CuSocket

CuSocket socket;
... // socket connect 請隨意

CuFile *pFile = new CuSocketFile(&socket);
... // 關聯後 當做檔案使用
pFile->Write(...);
MyApp.Save(/* CuFile* */ pFile); // 在這裡App不會知道 pFile 是個 Socket


// 實作架構 ///////////////////////////
class CuFile
{
...
public:
CuFile();
virtual ~CuFile();
...
virtual int Write( void* lpBuffer, int nCount );
...
};

class CuSocket
{
...
public:
CuSocket(void);
~CuSocket(void);
// 傳送資料
int Send(const void *lpBuf, int nBufLen, int nFlags);
...
};

class CuSocketFile : public CuFile
{
public:
CuSocketFile( CuSocket* pSocket, ... );
virtual ~CuSocketFile();
public:
virtual int Write( void* lpBuffer, int nCount );
...
};


void CuSocketFile::Write(const void *lpBuf, Uint nCount)
{
...
rc = m_pSocket->Send((const TCHAR*)lpBuf + idx, nLeft, 0);
...
}
作者 : programmer328(難玩)
[ 貼文 61 | 人氣 0 | 評價 570 | 評價/貼文 9.34 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/4 下午 06:43:00
C#的 Overload

class SQLConnectionManager{
     public SqlConnection GetConnection()
     {
     return new SqlConnection("預設連線字串");
     }
     public SqlConnection GetConnection(string serverName,string dbName,string password.....)
     {
     return new SqlConnection("..........."+serverName+"...."+dbName);
     }
}

class App{
     public static Main(){
     SQLConnectionManager manager=new SQLConnetionManager();
     SqlConnenction defaultConnection=manager.GetConnection();
     SqlConnection userConnection=manager.Get("192.168.0.1","ERP","AQEFF");
     }
}
作者 : cancle(笨毛) 貼文超過200則
[ 貼文 276 | 人氣 2885 | 評價 830 | 評價/貼文 3.01 | 送出評價 12 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/9/4 下午 07:44:45
初始化時 滿常用的

class CuPoint : public tagPOINT
{
public:
// Constructors

// create an uninitialized point
CuPoint() throw();
// create from two integers
CuPoint(int initX, int initY) throw();
// create from another point
CuPoint(POINT initPt) throw();
// create from a size
CuPoint(SIZE initSize) throw();
// create from an LPARAM: x = LOWORD(dw) y = HIWORD(dw)
CuPoint(LPARAM dwPoint) throw();
}


多參數指定時 也可以用
裡面 是 轉呼叫
class CuElement
{
...
void SetRect(int x, int y, int width, int height);
void SetRect(CuRect *rect);
...
}

void CElement::SetRect(int x, int y, int width, int height)
{
m_Rect.SetRect(x, y, x + width, y + height);
}

對參數的不同型態作支援
class CuFile
{
int Write( void* lpBuffer, int nCount );
int Write( LPCTSTR szStr );
int Write( LPCSTR szStr);
}


對SetValue && GetValue 使用 也不錯
class CuImageEx
{
UINT Height(){ return _nHeight; }
void Height(UINT nHeight){ _nHeight = nHeight; }

UINT Width(){ return _nWidth; }
void Width(UINT nWidth){ _nWidth = nWidth; }
}
作者 : alberta(電腦狂)
[ 貼文 57 | 人氣 3359 | 評價 150 | 評價/貼文 2.63 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/8/25 下午 01:53:35
Polymorphism(多型), 又翻做同名異式, 所以是用同一個名稱去表達不同的式子, 所以Overloading也是多型的一種, 多型有二種:

1.靜態多型: method overloading(function overloading)
2.動態多型: dynamic binding(在C++/C#中用virtual function來實作)
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4464 | 人氣 37262 | 評價 10860 | 評價/貼文 2.43 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/4/27 下午 12:49:34
just different implementations but same meaning.
作者 : ccwu660601(Sirius)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/9/22 上午 10:38:07
我記得十多年前看 C++ 時老是搞不懂這些名詞,overload 或是 polymorphism。後來接觸了其他語言,發現沒有這類搞不懂的問題。

所以這可能是 C++ 以及 C++ 的繼承者(Java, C#) 獨有的問題。

我看的其他語言對 polymorphism 和 overload 的描述大概是這樣子的:
  * polymorphism(多型):這和繼承有關,沒有繼承就沒有多型,如果要多型就一定要用繼承。
  * overload:和繼承無關。通常指同一個函式名卻有多個函式的定義。

所以這兩個是完全不一樣的概念。
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4464 | 人氣 37262 | 評價 10860 | 評價/貼文 2.43 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/9/22 下午 07:27:22
http://forums.codeguru.com/showthread.php?389261-Difference-between-polymorphism-amp-function-overloading&p=1401614
作者 : ccwu660601(Sirius)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/9/23 上午 10:50:51
是的,在 codeguru 上的那篇文章對 polymorphism 和 overloading 的定義和我的寫的幾乎相同。

polymorphism 用 runtime type 來決定要執行的函式,而且只適用於 member function。而 runtime type 之所以不同,正是因為繼承。

而 overloading 則和繼承甚至物件導向都無關。

Polymorphism 是物件導向中的一個重要概念。而 overloading 則是可有可無的概念。很多語言的設計者都排斥 overloading,包括 C 語言。
作者 : ozzy123(ozzy) 資訊類作業求救卓越專家C++卓越專家貼文超過4000則人氣指數超過30000點
[ 貼文 4464 | 人氣 37262 | 評價 10860 | 評價/貼文 2.43 | 送出評價 49 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/9/23 下午 06:46:52
http://agenda.ictp.trieste.it/agenda_links/smr1335/OOP/node29.html
 板主 : Clark
 > 物件導向程式設計 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 物件導向程式設計 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
物件導向程式設計
1 Arthur 180 
2 藍色LED 150 
3 長長 100 
4 Linkin 100 
5 love seeker 100 
6 Raymond 90 
7 Nets 80 
8 nop 70 
9 Huah 70 
10 矇矇 60 
物件導向程式設計
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.078125