函数的重载(1)
“重載”在自然語(yǔ)言中的含義
? 同一個(gè)標(biāo)識(shí)符在不同上下文有不同的意義
C++中函數(shù)的重載
- 用同一個(gè)函數(shù)名定義不同的函數(shù)
- 當(dāng)函數(shù)名和不同的參數(shù)搭配時(shí)函數(shù)的意義不同
int func(int a)
{
? return a;???????
}
int func(int a, int b)
{
? return a + b;
}
int func(int a, int b, int c)
{
? return a + b + c;
}
函數(shù)重載需要滿足的條件:(至少滿足下面一個(gè)條件)
- 參數(shù)個(gè)數(shù)不同
- 參數(shù)類(lèi)型不同
- 參數(shù)順序不同
int func(int a,char* s)
{
? return a;???????
}
int func(char* s, int a)
{
? return strlen(s);
}
當(dāng)函數(shù)默認(rèn)參數(shù)遇上函數(shù)重載會(huì)發(fā)上什么?
int func(int a, int b, int c = 0)
{
? return a + b + c;???????
}
int func(int a, int b)
{
? return a + b;
}
int main()
{
? printf("%d\n",func(1,2));
? return 0;
}
? 從上面編譯報(bào)錯(cuò)可以看出在C++中是不允許出現(xiàn)這種函數(shù)選擇模糊的情況
C++編譯器調(diào)用重載函數(shù)的準(zhǔn)則
- 將所有同名函數(shù)作為候選者
- 嘗試尋找可行的候函數(shù)
- 精確匹配實(shí)參
- 通過(guò)默認(rèn)參數(shù)能夠匹配實(shí)參
- 通過(guò)默認(rèn)類(lèi)型轉(zhuǎn)換匹配實(shí)參
- 匹配失敗
- 最終找到的候選參數(shù)不唯一,則出現(xiàn)二義性,編譯失敗
- 無(wú)法匹配所有候選者,函數(shù)未定義,編譯失敗
函數(shù)重載的注意事項(xiàng)
- 重載函數(shù)在本質(zhì)上是相互獨(dú)立的不同函數(shù)
- 重載函數(shù)的函數(shù)類(lèi)型不同
- 函數(shù)返回值不能作為函數(shù)重載的依據(jù)
- 函數(shù)重載是由函數(shù)名和參數(shù)列表決定的
小結(jié)
轉(zhuǎn)載于:https://www.cnblogs.com/ryluo/p/10048684.html
總結(jié)
- 上一篇: 1108轮播图和定时器this问题
- 下一篇: mysql数据库文件的真实的物理存储位置