函數重載(Function Overload) 用同一個函數名定義不同的函數 當函數名和不同的參數搭配時函數的含義不同
函數重載至少滿足下面的一個條件: 參數個數不同 參數類型不同 參數順序不同 函數返回類型不是函數重載的判斷標準!!! int =0佔位符也不是函數重載的判斷標準!!! void myprintf(int a, int b) { printf("a:%d, b:%d\n", a, b); } void myprintf(int a, int b, int =0) { printf("a:%d, b:%d c:%d \n", a, b); return a; } 無法重載,傳入兩個參數時,無法確認調用哪個 void myprintf(int a, int b) { printf("a:%d, b:%d\n", a, b); } void myprintf(int a, int b, int) //必須輸入三個參數 { printf("a:%d, b:%d c:%d \n", a, b); return a; } 兩者可以編譯通過,但是沒有意義,因爲傳第三個參數也沒用 void myprintf(int a, int b) { printf("a:%d, b:%d\n", a, b); } void myprintf(int a, int b, int c = 0) { printf("a:%d, b:%d c:%d \n", a, b); return a; } 無法重載,傳入兩個參數時,無法確認調用哪個 |
函數重載遇上函數默認參數 |
//當函數默認參數遇上函數重載會發生什麼 /* int func(int a, int b, int c = 0) { return a * b * c; }
int func(int a, int b) { return a + b; }
int main() { int c = 0;
c = func(1, 2); // 存在二義性,調用失敗,編譯不能通過
printf("c = %d\n", c);
printf("Press enter to continue ..."); getchar(); return 0; } */
/* 編譯器調用重載函數的準則 將所有同名函數作爲候選者 嘗試尋找可行的候選函數 精確匹配實參 通過默認參數能夠匹配實參 通過默認類型轉換匹配實參 |
函數重載
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.