函數(shù)重載
語法:函數(shù)名相同,函數(shù)參數(shù)不同
實現(xiàn)函數(shù)重載的條件
- 同一個作用域
- 參數(shù)個數(shù)不同
- 參數(shù)類型不同
- 參數(shù)順序不同
c中函數(shù)都是全局作用域,函數(shù)名不能相同。
c++中函數(shù)名可以相同
函數(shù)的返回值不可以作為函數(shù)重載條件,const可以做為重載條件
void func(int a,int b=10){};
void func(int a);
當函數(shù)重載碰到了函數(shù)默認參數(shù),要注意避免二義性
func(10);編譯器不知道調用那個
函數(shù)重載實現(xiàn)原理
編譯器為了實現(xiàn)函數(shù)重載,也是默認為我們做了一些幕后的工作,編譯器用不同的參數(shù)類型來修飾不同的函數(shù)名,比如void func();
編譯器可能會將函數(shù)名稱修飾成_func,當編譯器碰到void func(int x),編譯器可能將函數(shù)名修飾為_func_int,不同的編譯器有不同的命名方法,沒有一天統(tǒng)一的標準
函數(shù)默認參數(shù)
參數(shù)可以有默認值
void func(int a=10);//a默認值為10
如果有一個位置有了默認值,那么從這個位置開始,從左往右都必須要有默認值
void func(int a,int b=10,int c=20);//如果b有默認參數(shù),后邊的都要有
函數(shù)聲明和實現(xiàn),只能有一個有默認值
void func(int a,int b=10,int c=20);//聲明和實現(xiàn)的默認參數(shù)只寫一次
void func(int a,int b,int c)
{
};
函數(shù)占位參數(shù)
void func(int) int就是占位符
占位參數(shù) 調用時候必須要提供這個參數(shù)
占位參數(shù)也可以有默認值
c語言中沒有默認參數(shù)和占位參數(shù)
占位參數(shù)沒有什么大用途,只有重載++符號才有一點點用