函式的參數列可以用來接收 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 個整數型別的參數