首先引入一個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"
修改的方法是,保留下邊的這個(),或者將默認參數去掉。
就是說: