函數重載

函數重載(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;

}

*/

 

/*

編譯器調用重載函數的準則

將所有同名函數作爲候選者

嘗試尋找可行的候選函數

精確匹配實參

通過默認參數能夠匹配實參

通過默認類型轉換匹配實參

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