函數(shù)重載

如果同一作用域內(nèi)的幾個函數(shù)名字相同但形參列表不同,我們稱之為重載函數(shù)。

這些函數(shù)接受的形參類型不一樣,但是執(zhí)行的操作非常類似畦浓,當(dāng)調(diào)用這些函數(shù)時,編譯器會根據(jù)傳遞的實(shí)參類型推斷想要的是哪個函數(shù)检疫。

重載函數(shù)

函數(shù)的名字僅僅是讓編譯器知道它調(diào)用的是哪個函數(shù)讶请,而函數(shù)重載可以在一定程度上減輕起名字記名字的痛苦。

當(dāng)有一種數(shù)據(jù)庫應(yīng)用屎媳,需要創(chuàng)建幾種不同的函數(shù)夺溢,此時函數(shù)重載可以定義一組函數(shù),它們的名字都是 lookup 但是查找的依據(jù)不同剿牺。

可以通過任意一種形式調(diào)用函數(shù)

三個函數(shù)各不相同企垦,但都是同一個名字。編譯器根據(jù)實(shí)參的類型確定應(yīng)該調(diào)用哪一個函數(shù)晒来。

重載函數(shù)應(yīng)該在形參數(shù)量或形參類型上有所不同钞诡。

不允許兩個函數(shù)除了返回類型外其它所有的要素都相同。

錯誤案例


有時看起來不一樣的形參列表其實(shí)是相同的

頂層的 const 不影響傳入函數(shù)的對象湃崩,一個擁有頂層 const 的形參無法和另一個沒有頂層 const 的形參區(qū)分開了荧降。

const 案例

如果形參是某種類型的指針或引用,則通過區(qū)分其指向的事常量對象還是非常量對象可以實(shí)現(xiàn)函數(shù)重載攒读,此時的 const 是底層朵诫。

形參是某種類型的指針或引用

const_casr 在重載函數(shù)的情境中最有用。

這個函數(shù)的參數(shù)和返回類型都是 const string 的引用薄扁,可以對兩個非常量的 string 實(shí)參調(diào)用這個函數(shù)剪返,但返回的結(jié)果仍是 const string 的引用废累。因此需要一種新的 shorterString 函數(shù)。

當(dāng)它的實(shí)參不是常量時脱盲,得到的結(jié)果是一個普通的引用邑滨,此時使用 const_cast 。

const_cast 案例

首先將實(shí)參強(qiáng)制轉(zhuǎn)換成對 const 的引用钱反,然后調(diào)用 shorterString 函數(shù)的 const 版本掖看。const 版本返回對 const string 的引用,這個引用事實(shí)上綁定在某個初始的非常量實(shí)參上面哥。所有可以再將其轉(zhuǎn)換回一個普通的 string& 。

定義一組重載函數(shù)后,我們需要以合理的實(shí)參調(diào)用它們蹲坷。函數(shù)匹配是指一個過程,在這個過程中我們把函數(shù)調(diào)用與一組重載函數(shù)中的某一個關(guān)聯(lián)起來邑飒,函數(shù)匹配也叫做重載確定。

編譯器首先將調(diào)用的實(shí)參與重載集合中每一個函數(shù)的形參進(jìn)行比較撒轮,然后根據(jù)比較的結(jié)果決定到底調(diào)用那個函數(shù)。

當(dāng)調(diào)用重載函數(shù)時有三種可能的結(jié)果:

1顶瞳、編譯器找到一個與實(shí)參最佳匹配的函數(shù),并生成調(diào)用該函數(shù)的代碼符喝。

2协饲、找不到任何一個函數(shù)與調(diào)用的實(shí)參匹配描馅,此時編譯器發(fā)出無匹配的錯誤信息。

3况凉、有多于一個函數(shù)可以匹配刁绒,但是每一個都不是明顯的最佳選擇。此時也將發(fā)生錯誤嫂丙。稱為二義性調(diào)用。

重載對于作用域的一般性質(zhì)沒有什么改變隅肥,如果我們在內(nèi)層作用域中聲明名字,它將隱藏外層作用域中聲明的同名實(shí)體。在不同的作用域中無法重載函數(shù)名伍纫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末良漱,一起剝皮案震驚了整個濱河市矾兜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌返帕,老刑警劉巖铣卡,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡嫌褪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門笼痛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來裙秋,“玉大人摘刑,你說我怎么就攤上這事枷恕。” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夸盟。 經(jīng)常有香客問我,道長像捶,這世上最難降的妖魔是什么上陕? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮硼莽,結(jié)果婚禮上庶溶,老公的妹妹穿的比我還像新娘。我一直安慰自己懂鸵,他們只是感情好偏螺,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匆光,像睡著了一般套像。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上终息,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天夺巩,我揣著相機(jī)與錄音,去河邊找鬼周崭。 笑死柳譬,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的续镇。 我是一名探鬼主播美澳,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了人柿?” 一聲冷哼從身側(cè)響起柴墩,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凫岖,沒想到半個月后江咳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哥放,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年歼指,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甥雕。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡踩身,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出社露,到底是詐尸還是另有隱情挟阻,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布峭弟,位于F島的核電站附鸽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瞒瘸。R本人自食惡果不足惜坷备,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望情臭。 院中可真熱鬧省撑,春花似錦、人聲如沸俯在。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跷乐。三九已至肥败,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劈猿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工潮孽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揪荣,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓往史,卻偏偏與公主長得像仗颈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容