C 中關於預設建構函式和預設引數

2021-06-22 09:21:06 字數 1037 閱讀 2600

# 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可以看到 在建構函式中使用預...