[問題] 關於 method overloading

作者: edash (團長)   2016-03-14 02:34:49
各位板友好
目前在學習 method overloading,已經了解到不同 method 要 overloading 的前提是:
1. method的名稱要相同
2. 參數的型別順序或種類不同
另外,看到一句話有點不解
Internally, the compiler uses longer method names that include
the original method name,
the types of each parameter and the exact order of the parameters
to determine whether the methods in a class are unique in that class.
解讀這句話的意思是:
編譯器實際的作法,是用較長的 method 簽名,來判定
類別中的其餘 method 是否為唯一。
但還是想多了解一些細節
我可以理解,不管程式中有無呼叫這些 overloaded method,編譯器也應該會去
比較不同 method,來確定類別中一定不會發生兩個以上的 method 有著相同簽名
但所謂的「longer」的意思是,有著較多參數的 method 嗎?
如果有板友能再多解釋一下編譯器的實際判定作法就太好了
謝謝~
作者: LPH66 (-6.2598534e+18f)   2016-03-14 03:32:00
你(或者是教材)或許把 overload 跟 override 搞混了這裡講的東西比較接是 override, 繼承時有沒有覆蓋父類方法接近*overload 則只單純是同名, 而且正是以參數的不同做為分別至於所謂的較長 method 簽名, 各語言或各編譯器有不同做法java 的做法是把參數型態和回傳值編碼成一個字串使用這字串和函數名共兩個字串做一組來看其他語言有把這兩個字串給編碼在一起成一個字串的 (如 C++)一般這類的編碼規則會叫做 name-mangling
作者: edash (團長)   2016-03-14 03:45:00
抱歉,開頭那邊打錯了,我修改一下謝謝回應,我大概懂意思了
作者: cha122977 (CHA)   2016-03-14 22:04:00
我個人的解讀是,compiler其實用的名稱比你寫的還長那個更長的名稱則是以 原名稱+其參數型別 組合出來的因此只要參數型別/數量不同 就會被判斷成別的function表面上名稱一樣,但對compiler來說兩者是不一樣的東西^參數不同的
作者: edash (團長)   2016-03-16 07:12:00
謝謝兩位回應

Links booklink

Contact Us: admin [ a t ] ucptt.com