1. 程式人生 > 其它 >C++函式高階

C++函式高階

技術標籤:C++c++

  1. 預設引數
    注意事項:
    (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; }

結果:
在這裡插入圖片描述

  1. 佔位引數
    語法:
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. 函式過載
    作用:函式名可以相同,提高複用性
    函式過載的滿足條件:
  • 同一作用域下
  • 函式名稱相同
  • 函式的引數型別不同個數不同順序不同
    注意:函式的返回值不可以作為函式過載的條件

注意事項:
(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);//函式過載碰到預設引數會出現二義性
} 

報錯!!!編譯器不知道呼叫哪個!!!
函式過載碰到預設引數會出現二義性!!!!儘量避免這種情況!!!