預設引數


C++允許您使用預設引數,預設引數的使用在一開始的函式原型宣告中進行定義,而之後的函式定義則無需再宣告,來看個實際例子:

#include <iostream> 
using namespace std;

double area(double, double = 3.14);

int main() {
double r, pi;

cout << "輸入半徑與PI: ";
cin >> r >> pi;

cout << "面積(自訂PI): " << area(r, pi)
<< endl;
cout << "面積(default): " << area(r)
<< endl;

return 0;
}

double area(double r, double pi) {
return r*r*pi;
}

執行結果:
輸入半徑與PI: 3 3.14159
面積(自訂PI): 28.2743
面積(default): 28.26


在上面的程式中,area()函式將參數pi的預設值設定為3.14,在不指定第二個引數時,area()將會自動使用預設引數,使得pi設定為 3.14,如果指定pi值的話,則就以使用者的指定來設定pi值。

您可以指定兩個以上的預設引數,然而必須注意的是,預設引數一旦出現在參數列,則其右邊的參數也必須設定預設引數,所以在使用預設引數時,必須注意引數列 的配置順序,例如下面的宣告是錯誤的:
double volumn(double h = 1.0, double w = 1.0, double l);

而必須是以下才是正確的:
double volumn(double l, 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');這個方法則是錯誤的,所以預設引數的介面是必須小心設計的。