C++函式高階
阿新 • • 發佈:2020-12-24
- 預設引數
注意事項:
(1)如果某個位置已經有了預設引數,那麼從這個位置往後,從左往右都必須有預設值
int func(int a,int b = 10,int c = 20){
return a + b + c;
}
//一旦函式的某個引數有了預設值,那麼該引數的後面的引數也必須給它們預設值
(2)如果函式的宣告有了預設引數,那麼函式的實現就不能有預設引數了。
宣告和實現只能有一個有預設引數。不然有二義性。
#include <iostream>
using namespace std;
int func2(int a = 10, int b = 10 );
int func2(int a = 10, int b = 10){
return a+b;
}
int main(){
cout << func2(10,10) << endl;
return 0;
}
結果:
- 佔位引數
語法:
void func(int a , int){}
example:
#include <iostream>
using namespace std;
void func(int a, int){
cout << "this is a function!" << endl;
}
int main(){
func(10,10);
return 0;
}
注意:這裡呼叫func必須有兩個整形引數
strange:佔位引數在函式體裡內用不到為啥還要佔位
佔位引數也可以有預設引數
void func(int a, int = 10){}
- 函式過載
作用:函式名可以相同,提高複用性
函式過載的滿足條件:
- 同一作用域下
- 函式名稱相同
- 函式的引數型別不同或個數不同或順序不同
注意:函式的返回值不可以作為函式過載的條件
注意事項:
(1)引用作為過載條件
const int引用和int引用是不同的引數型別
#include <iostream>
using namespace std;
void func(int &a){ //int &a=10; 不合法的
cout << "func(int &a)的呼叫" << endl;
}
void func(const int &a){ //const int &a = 10;
cout << "const func(int &a)的呼叫" << endl;
}
int main(){
int a = 10; //a是變數,可讀可寫
func(a);
func(10);
return 0;
}
(2)函式過載碰到函式預設引數
#include <iostream>
using namespace std;
void func2(int a,int b = 10){
cout << "func2(int a,int b)的呼叫" << endl;
}
void func2(int a){
cout << "func2(int a)的呼叫" << endl;
}
int main(){
func2(10);//函式過載碰到預設引數會出現二義性
}
報錯!!!編譯器不知道呼叫哪個!!!
函式過載碰到預設引數會出現二義性!!!!儘量避免這種情況!!!