_函數重載

       對於C++中函數的重載,我們先來看看下面的幾行代碼:

       很簡單的兩個函數,我們可以發現,其實這兩個函數都是爲了實現同一個功能:判斷形參是正數還是負數,如果是正數則返回自己,如果是負數則返回相反數。

       功能一樣的函數卻因爲形參的不同要弄出兩個函數來,顯然有點囉嗦了,所以爲了提高代碼的簡潔,C++提出了函數重載功能。


我們先來看看怎樣才能實現函數重載:

1.函數名相同

2.參數的個數、類型、排序不相同

3.返回值的類型不同不能構成重載


實踐是檢驗真理的唯一標準,那麼我們來看看代碼吧!

       這段代碼中,我們定義了兩個同名函數,它們不但沒有被報錯,反而還能正常地執行。我們發現,其實它們真正的不同也只有形參的類型不同(printf函數裏隨便輸出的就忽略了)。

       從打印的結果我們可以發現,當形參是整數時,自動調用了形參是整數的那個函數,而當形參是2.5時,就調用了下面的print函數。

       其實print函數是實現了重載!


我們再往下看:

3個print由於形參的類型或形參的個數或排列方式的不同,構成了C++偉大的函數重載。


我們還說,函數的返回值不同不能構成函數重載,我們來試一試:

代碼編譯出錯了,ambiguating就是二義性的意思。


函數重載遵循嚴格的調用匹配原則,這點我們需要特別注意。

匹配原則:

1.嚴格匹配,找到則調用

2.通過隱式轉換尋求一個匹配,找到則調用


例如:

我們知道‘a’是個字符,它通過隱式轉換尋找到了int,所以程序調用了第一個print函數。


我們需要注意的是,C++允許,int到long和double,double到int和float的隱式類型轉換,遇到這種情形,則會引起二義性。


上面的代碼都編譯錯誤了,因爲對於int可以隱式轉換成long或者double,double可以隱式轉換成int和float,計算機不知道選擇哪個函數來實現,所以就報錯了。




                                                                                                     Kyrie Irving___全.





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章