默認參數

首先引入一個C++中獲取當前時間的方法。

void currentTime(){
    time_t t = time(0);//這就是一個時間戳
    char temp[64];
    strftime(temp, sizeof(temp), "%Y - %m - %d - %X - %A", localtime(&t));
    cout<<temp<<endl;
    //2016 - 08 - 01 - 21:15:30 - Monday   YMDXA的大小寫決定了當前時間的輸出格式
}
?使用這個time_t類以及time()這個函數需要#include <time.h>

不過↑↑↑↑↑↑貌似跟下文沒有什么關系

  • 這是一段輸出當前天氣的函數,當然了,天氣是咱們自己給的,但是它有一個默認值,看到了沒,就是"sunny"
void weatherCast(string w="sunny"){
    cout<<"today's weather is "<< w <<endl;
}

當我們調用這個函數的時候,如果傳一個參數"snow"

weatherCast("snow");

?輸出的結果是today's weather is snow
如果我們調用這個函數的時候,并沒有給定參數,就像這樣↓↓↓

weatherCast();

?它輸出的結果是什么呢?當然是默認的"sunny"了,today's weather is snow

好了,這只是引入了默認參數的一個基本的概念,結下了就要說一說,默認參數在使用的時候需要注意什么了。

有一個例子,是求體積的,比如說,需要求一棟樓里的房子的體積,一棟樓里,房子的高度肯定都是一樣的,對吧,所以可以給一個默認值。

int bulk(int length ,int high = 3,int width){
    return length * width * high;
}

編譯器報了一個錯:Missing default argument on parameter 'width'
它說我沒有給width這個參數設置默認值,原來是這樣啊??

從右向左默認,并且中間不能跳躍。
實參的個數 + 默認參數的個數 >= 形參的個數

對于第一句話,咱們知道可以這樣修改

int bulk(int length ,int high = 3,int width = 3){
    return length * width * high;
}

或者把高度這個參數挪到右邊。
那么第二句話是什么意思呢?
打比方說啊,就拿上邊這個修改后的,有兩個默認參數的這個函數來說,如果我們在調用這個函數的時候,并沒有給參數,就像下邊這樣↓↓

 int b = bulk();

這時候,你會發現編譯器報了一個錯"No matching function for call to 'bulk' ",這個原因應該不用多說吧 這里,實參的個數為0 ,默認參數的個數為2,而形參的個數為3。
?其實就是,你給的條件加上人本身的條件,不滿足函數參數所要求的。

好了接下來還有一個,當默認參數和函數重載遇到了,會發生什么呢?

就像是這樣↓↓

void print(int a){
    printf("void ptint(int a)");
}

void print(int a,int b = 10){
       printf("void print(int a,int b = 10)");
}

如果我們這樣調用的話↓↓

print(1);

就會報錯"call to print is ambiguous"

修改的方法是,保留下邊的這個(),或者將默認參數去掉。
就是說:

一個參數或者是兩個參數的形式,重載與默認參數都是能夠實現的,但不能同時存在
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 新的power(x, n)函數定義沒有問題,但是,舊的調用代碼失敗了,原因是我們增加了一個參數,導致舊的代碼因為缺...
    h266094閱讀 441評論 0 0
  • 寫在前面 如非特別說明,下文均基于Python3 Python進階-函數默認參數 一、默認參數 python為了簡...
    理查德成閱讀 1,967評論 0 3
  • 如果形參沒有被傳入對應的實參或者傳入了 undefined ,則該形參會被賦一個默認值。 描述 在 JavaScr...
    王康_Wang閱讀 387評論 0 0
  • 為何要有默認參數? 降低函數調用的難度,試想一下,假設一個函數有三個變量,年齡,姓名,城市。假設大多數人來源于同一...
    鴨梨山大哎閱讀 2,416評論 0 2
  • 上午九點半,沈靜姝準時趕到教室,去死撐自己在高考后給自己添的堵……學日語。 要說學日語這個事吧,完全是自己腦子一熱...
    良月弦閱讀 223評論 7 1