C++ 可以使用預設引數,要在一開始的函式原型宣告中定義預設引數,函式實作時無需再定義,來看個實際例子:
#include <iostream>
using namespace std;
double area(double, double pi = 3.14159);
int main() {
double r, pi;
cout << "輸入半徑與 PI: ";
cin >> r >> pi;
cout << "面積(自訂 PI):" << area(r, pi) << endl
<< "面積(default):" << area(r) << endl;
return 0;
}
double area(double r, double pi) {
return r*r*pi;
}
執行結果:
輸入半徑與 PI: 25 3.14
面積(自訂 PI):1962.5
面積(default):1963.49
在上面的程式中,area
函式將參數 pi
預設值設為 3.14159,在不指定第二個引數時,area
將使用預設引數,如果指定 pi
的話,就以使用者的指定。
可以指定兩個以上的預設引數,然而預設引數一旦出現在參數列,右邊的參數也必須設定預設引數,在使用預設引數時,必須注意配置順序,例如下面的宣告是錯誤的:
double volumn(double h = 1.0, double w = 1.0, double len);
必須是以下才是正確的:
double volumn(double len, double w = 1.0, double h = 1.0);
如果函式有兩個以上的預設引數,在程式呼叫時必須注意,因為預設引數是以引數的順序由左至右來進行的,例如若有個函式宣告如下:
bool setScreen(int width = 80, int height = 24, char bkcolor = ' ');
在呼叫函式時,若使用 setScreen('R')
,相當於 setScreen('R', 24, ' ')
而不是 setScreen(80, 24, 'R')
,而呼叫時使用 setScreen(, , 'R')
這個方法是錯誤的。
定義函式原型時,允許多次定義預設引數,例如:
#include <iostream>
using namespace std;
void f(int n, int k = 1);
void f(int n = 0, int k);
int main() {
f();
return 0;
}
void f(int n, int k) {
cout << n << endl;
cout << k << endl;
}
以上可以通過編譯並執行,第二次定義 f
原型時,雖然 k
沒有定義預設引數,然而前一個 f
中有定義,因此是合法的。