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