函式的參數列可以用來接收 0 至多個傳入的資料,參數與參數間須以逗號分開,而且同一個函式內的各參數名稱不可重複。 如果沒有參數要傳,則可以用 void 或空白表示:

int funct();
int funct(void);    //這兩種宣告是一樣的

參數列中各參數的型別有時也稱為函式的『簽名』( Signature ),在 C++ 的程式中,函式名稱可以重複 ( 在 C 語言中是不允許的 ),但名稱與簽名合起來則必須是唯一而不可重複的。 使用相同的名稱來定義不同的函式就稱為『多載』( Overload ),此時 C++ 的 compiler 就得依照參數列內容的不同來加以識別了。

int max(int, int);
char max(char, char);
long max(long, long);

以上三個函式的宣告均為合法,因為它們的參數列不同;compiler 會依照呼叫函式時,其所傳實際參數的型別來決定要使用哪一個函式。 例如:max(‘a’, ‘b’); 則會使用上述第二個函式。

☛ 具有預設值的參數

我們可以為參數設定預設值,使得在呼叫函式時,若對應的實際參數被省略,則該形式參數將自動設為預設之值:

funct(int a, int b, int c=5);
.....
funct(1,2);
....

funct(int a, int b, int c);   //參數 c 自動設為 5
{
      ......
}

具有預設值的參數可以有多個,但都必須集中在參數列的最右邊。 注意! 在同一個程式檔內每個參數只能做一次預設值的指定:

funct(int a=5);    //宣告
.....
.....
funct(int a=5)     //錯誤:預設值出現兩次
{
      ......
}

我們一般都將預設值加在表頭檔內的宣告之中,如此才能讓 compiler 在編譯不同的程式檔時能夠作正確的型別檢查。

另外,請注意下列兩種函式宣告的意義是完全不一樣的:

fun();          //在實際呼叫時,不可傳遞任何參數
fun(int a=0);   //呼叫時可傳 0 或 1 個整數型別的參數