C++函數(shù)重載的細(xì)節(jié)圖文詳解
前言:如果不想看論證,可以直接點(diǎn)擊總結(jié),跳轉(zhuǎn)到最后
1、使用重載函數(shù)時(shí),如果數(shù)據(jù)類型不匹配,C++嘗試使用類型轉(zhuǎn)換與形參進(jìn)行匹配,如果轉(zhuǎn)換后有多個(gè)函數(shù)能匹配上,編譯器將報(bào)錯(cuò);
論證如下:
#include <iostream>
using namespace std;
void show(short no, string message)
{
cout << "short 親愛的" << no << "號:" << message << endl;
}
void show(long no, string message)
{
cout << "long 親愛的" << no << "號:" << message << endl;
}
void show(double no, string message)
{
cout << "double 親愛的" << no << "號:" << message << endl;
}
int main()
{
short a = 10;
show(a,"我喜歡你");
long b = 10;
show(b,"我喜歡你");
double c = 10;
show(c,"我喜歡你");
return 0;
}運(yùn)行:

各自都調(diào)用了自己對應(yīng)的函數(shù),沒有問題;
我們改一下,把long和double的重載函數(shù)注釋掉:

我們定義一個(gè)double的變量,看他是否會(huì)使用short的show輸出:

成功輸出了,沒有問題,只不過編譯器提示了,double轉(zhuǎn)成short可能會(huì)確實(shí)精度,不管他
如果我們定義short的變量,調(diào)用double的函數(shù)呢?

也沒有問題,我們發(fā)現(xiàn)了編譯器會(huì)幫我們隱士轉(zhuǎn)換;
那么如果我們定義short變量,放開long和double的函數(shù),那么short變量會(huì)調(diào)用哪一個(gè)呢?

直接報(bào)錯(cuò),顯示有多個(gè)重載函數(shù);
觀點(diǎn)1論證成功!
2、引用可以作為函數(shù)重載的條件,但是,調(diào)用重載函數(shù)的時(shí)候,如果實(shí)參是變量,編譯器將形參類型的本身和類型引用視為同意特征;
論證如下:
#include <iostream>
using namespace std;
void show(long no, string message)
{
cout << "long 親愛的" << no << "號:" << message << endl;
}
void show(long& no, string message)
{
cout << "long 親愛的" << no << "號:" << message << endl;
}
int main()
{
long c = 10;
show(c, "我喜歡你");
return 0;
}調(diào)用函數(shù)時(shí),我們先傳入變量,運(yùn)行一下:

無法運(yùn)行,他說函數(shù)有多個(gè)重載;因?yàn)閘ong和long&都能操作變量c;
如果我們傳入常量呢?

成功的調(diào)用了long,因?yàn)椴荒軐ΤA窟M(jìn)行引用;
觀點(diǎn)2論證結(jié)束!
3、如果重載函數(shù)有默認(rèn)參數(shù),調(diào)用函數(shù)時(shí),可能導(dǎo)致匹配失??;
論證如下:

觀點(diǎn)3論證結(jié)束!
4、const不能作為函數(shù)重載的特征;
論證如下:

觀點(diǎn)4論證結(jié)束!
5、返回值類型不同不能作為函數(shù)重載的特征;
論證如下:

觀點(diǎn)5論證結(jié)束!
總結(jié)
1、使用重載函數(shù)時(shí),如果數(shù)據(jù)類型不匹配,C++嘗試使用類型轉(zhuǎn)換與形參進(jìn)行匹配,如果轉(zhuǎn)換后有多個(gè)函數(shù)能匹配上,編譯器將報(bào)錯(cuò);
2、引用可以作為函數(shù)重載的條件,但是,調(diào)用重載函數(shù)的時(shí)候,如果實(shí)參是變量,編譯器將形參類型的本身和類型引用視為同意特征;
3、如果重載函數(shù)有默認(rèn)參數(shù),調(diào)用函數(shù)時(shí),可能導(dǎo)致匹配失?。?/p>
4、const不能作為函數(shù)重載的特征;
5、返回值類型不同不能作為函數(shù)重載的特征;
到此這篇關(guān)于C++函數(shù)重載的文章就介紹到這了,更多相關(guān)C++函數(shù)重載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言中break與continue的用法和區(qū)別詳解
當(dāng)我們使用while或for循環(huán)時(shí),如果想提前結(jié)束循環(huán)(在不滿足結(jié)束條件的情況下結(jié)束循環(huán)),可以使用break或continue關(guān)鍵字,這篇文章主要給大家介紹了關(guān)于C語言中break與continue的用法和區(qū)別的相關(guān)資料,需要的朋友可以參考下2021-10-10
實(shí)例講解C++編程中l(wèi)ambda表達(dá)式的使用
這篇文章主要介紹了C++編程中l(wèi)ambda表達(dá)式的使用實(shí)例,lambda表達(dá)式特性的引入在C++11中可謂千呼萬喚始出來,非常重要,需要的朋友可以參考下2016-01-01
C++11?nullptr實(shí)現(xiàn)初始化空指針
避免產(chǎn)生“野指針”最有效的方法,就是在定義指針的同時(shí)完成初始化操作,本文主要介紹了C++11?nullptr初始化空指針,感興趣的可以了解一下2022-01-01
C語言接口與實(shí)現(xiàn)方法實(shí)例詳解
這篇文章主要介紹了C語言接口與實(shí)現(xiàn)方法,包括接口的概念、實(shí)現(xiàn)方法及抽象數(shù)據(jù)類型等,并配合實(shí)例予以說明,需要的朋友可以參考下2014-09-09
linux c++ 服務(wù)器端開發(fā)面試必看書籍整理
這篇文章主要介紹了linux c++ 服務(wù)器端開發(fā)面試必看書籍整理,需要的朋友可以參考下2020-02-02

