C語言Plus 2020-04-03
在C++中,定義函數時可以給形參指定一個預設的值,這樣調用函數時如果沒有給這個形參傳值(沒有對應的實參),那麼就使用這個預設的值。也就是說,調用函數時可以省略有預設值的參數。如果使用者指定了參數的值,那麼就使用使用者指定的值,否則使用參數的預設值。

#include<iostream> using namespace std; //@C語言Plus //帶預設參數的函數 void func(int n, float b = 1.2, char c = '@') { cout << n << ", " << b << ", " << c << endl; } int main() { //為所有參數傳值 func(10, 3.5, '#'); //為n、b傳值,相當于調用func(20, 9.8, '@') func(20, 9.8); //隻為n傳值,相當于調用func(30, 1.2, '@') func(30); getchar(); return 0; }
當程式運作時輸出:
10, 3.5, #20, 9.8, @30, 1.2, @
本例定義了一個帶有預設參數的函數 func(),并在 main() 函數中進行了不同形式的調用。為參數指定預設值非常簡單,直接在形參清單中指派即可,與定義普通變量的形式類似。
指定了預設參數後,調用函數時就可以省略對應的實參了。

注意預設參數位置
C++規定,預設參數隻能放在形參清單的最後,而且一旦為某個形參指定了預設值,那麼它後面的所有形參都必須有預設值。實參和形參的傳值是從左到右依次比對的,預設參數的連續性是保證正确傳參的前提。
下面的寫法是正确的:
void func(int a, int b = 10, int c = 20) {}void func(int a, int b, int c = 20) {}
但這樣寫不可以:
void func(int a, int b = 10, int c = 20, int d) {}void func(int a, int b = 10, int c, int d = 20) {}
預設參數并非程式設計方面的重大突破,而隻是提供了一種便捷的方式。在以後設計類時你将發現,通過使用預設參數,可以減少要定義的析構函數、方法以及方法重載的數量。

需要注意的情況
1. 預設參數隻能放在函數聲明處或者定義處,能放在聲明處就放在聲明處 。
預設參數在聲明和定義處都有了,那麼就會有編譯錯誤。(兩次預設指派是不被允許的。)
a.大部分情況,别人調用你的代碼隻能看到函數聲明,如果你寫在定義處,别人根本不知道你的預設參數是什麼。
b.如果你是在定義處寫的預設參數,那麼你在使用該函數前就需要把函數定義放在前面。不然編譯階段通過無預設參數的函數聲明無法确定這個函數是帶預設參數的。
是以,預設參數寫在聲明處啊。^ ^
2.不要重載一個帶預設參數的函數