# include
using namespace std;
class time
time(int s,int h=10,int m=52)
// time(int h,int m,int s):hour(h),minute(m),sec(s){};//過載建構函式,執行時會根據形參的不同,自動匹配呼叫(類的初始化資料成員的另一種方法:引數初始化列表)
void set_time();
void show_time();
//私有成員資料
private:
int hour;
int minute;
int sec;
};void time::set_time()
void time::show_time()
在乙個類中定義了全部是預設引數的建構函式後,不能再定義過載建構函式。例:
box(int =10,int =10,int =10);
1box();
2box(int,int);
3若有以下定義語句:
box box1;
//是呼叫上面的第乙個預設引數的建構函式,還是第二個預設建構函式
box box2(15,30);
//是呼叫上面的第乙個預設引數的建構函式,還是第三個建構函式
所謂預設建構函式,就是呼叫建構函式時,不必給出實參的建構函式。
第2個建構函式是最基本,最原始的建構函式;第1個就是形參都已預設,指定了的建構函式,呼叫時實參可以傳過去1個,2個,3個,甚至0個資料。
比如,第乙個語句:box box1;我們可以認為他是直接呼叫第2個建構函式,也可以認為他是呼叫了第1個建構函式,只不過沒有實參傳遞過去而已,這樣就產生了歧義。
同理,第二個語句,我們可以理解為它呼叫了第3 個建構函式。但同時,理解為它呼叫第1個建構函式,只不過僅傳過去2個實參,也是可是說得通的。這也就產生了歧義。
事實上,上面3個函式中任意乙個都可以說是另兩個的過載函式,那麼「在乙個類中定義了全部是預設引數的建構函式後,不能再定義過載建構函式」就很好容易理解了
C 中建構函式預設引數使用
一 include using namespace std class box box box int h,int w,int len int box volume int main box box1 1 不指定第2 3個實參 cout box1 s volume 二 執行 root localho...
C 關於預設建構函式和無參建構函式
預設建構函式 在不提供任何建構函式的情況下,編譯器給出乙個不帶引數的,不包含 的建構函式。include using namespace std classa intmain 當已經提供了顯式的建構函式,例如 include using namespace std classa int main 此...
建構函式的引數預設
建構函式中引數的值既可以通過實參傳遞,也可以指定為某些預設值,即如果使用者不指定實參值,編譯系統就使形參取預設值。在建構函式中也可以採用這樣的方法來實現初始化。include using namespace std class a int main 程式執行結果為 4 0可以看到 在建構函式中使用預...