1.函數重載概念ios
函數重載(Function Overload)函數
用同一個函數名定義不一樣的函數spa
當函數名和不一樣的參數搭配時函數的含義不一樣3d
2 .函數重載的判斷標準 code
函數重載至少知足下面的一個條件: orm
參數個數不一樣 blog
參數類型不一樣 ci
參數順序不一樣 編譯器
3 .函數返回值不是函數重載的判斷標準 io
4 .編譯器調用重載函數的準則
將全部同名函數做爲候選者
嘗試尋找可行的候選函數
精確匹配實參
經過默認參數可以匹配實參
經過默認類型轉換匹配實參
匹配失敗
最終尋找到的可行候選函數不惟一,則出現二義性,編譯失敗。
沒法匹配全部候選者,函數未定義,編譯失敗。
函數重載的注意事項
重載函數在本質上是相互獨立的不一樣函數(靜態鏈編)
重載函數的函數類型是不一樣的
函數返回值不能做爲函數重載的依據
函數重載是由函數名和參數列表決定的。
#include <iostream> using namespace std; void myPrint(int a) { cout<<"a="<<a<<endl; } void myPrint(const char *p) { //cout<<"p="<<p<<endl; printf("%s \n",p); } void myPrint(int a,int b) { cout<<"a="<<a<<endl; cout<<"b="<<b<<endl; } /* //返回值 不是 判斷函數重載的標準 int myPrint(int a,int b) { cout<<"a="<<a<<endl; cout<<"b="<<b<<endl; } */ //1 當函數名和不一樣的參數搭配時函數的含義不一樣 //2 函數重載的判斷標準 //參數個數不一樣 //參數類型不一樣 //參數順序不一樣 //3 返回值 不是 判斷函數重載的標準 //4 重載函數的調用標準 int main(void) { myPrint(1); myPrint("11122222333aaa"); myPrint(1,2); return 0; }
函數默認參數 和 函數重載 在一塊兒 可能會產生二義性
k//函數默認參數 和 函數重載 在一塊兒 void myfunc(int a,int b,int c=0) { cout<<"a:"<<a<<"b:"<<b<<"c:"<<c<<endl; } void myfunc(int a,int b) { cout<<"a:"<<a<<"b:"<<b<<endl; } void myfunc(int a) { cout<<"a:"<<a<<endl; } int main(void) { //myfunc(1,2); //函數調用時 會產生二義性 myfunc(1); return 0; }