建構函式初始化(預設構造)

2021-09-01 05:59:03 字數 1379 閱讀 6167

當且僅當沒有定義任何建構函式時,編譯器才會提供預設建構函式。為類定義了建構函式後,程式設計師就必須為他提供預設建構函式。

我們怎麼理解這句話呢?

首先,什麼是預設建構函式?

預設建構函式時在未提供顯示初始化時,用來建立物件的建構函式。也就是說,它是用於下面這種宣告的建構函式:

expa expa;  

然後我們看下沒有宣告預設建構函式出錯的例子: 

#includeusing namespace std;

class expa

};expa::expa(int a,int b)

int main()

error:類expa沒有預設建構函式。

修改後:

#includeusing namespace std;

class expa

};expa::expa(int a,int b)

int main()

這個錯誤消除了,導致了新的問題,沒有初始化。

1>main.obj : error lnk2019: 無法解析的外部符號 "public: __thiscall expa::expa(void)" (??0expa@@qae@xz),該符號在函式 _main 中被引用

1>f:\vs project\香蕉船\debug\香蕉船.exe : fatal error lnk1120: 1 個無法解析的外部命令

我們將預設構造改為另一種形式進行初始化的預設構造:

expa():x(0),y(0){} ;
its over!! its over!!congratulations to cleveland!!!

最後提供**可以自己試一試:

#includeusing namespace std;

class expa

//包含了上面兩種共性

//非預設建構函式

expa(int a,int b); //非預設建構函式,a、b只宣告沒有定義

//expa(int a,int b):x(a),y(b){}; //上一行的衍生體,只不過是在類內定義初始化

int sum( )

};expa::expa(int a,int b) //expa(int a,int b); 的實現

int main()

預設初始化建構函式

預設建構函式 定義 可以不通過提供任何實際引數就能呼叫的建構函式稱為預設建構函式 如果定義了乙個陣列 但是沒有提供初始值 如 x ax 100 如果類x 沒有預設建構函式 則會產生編譯錯誤 例項 class x 預設建構函式 x int v 建構函式 x int v1,int v2 同上 priva...

建構函式初始化列表

建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 example example ival 0 dval 0.0 ival 和dval 是類的兩個資料成員 上面的例子和下面不用初始化列表的建構函式看似沒什麼區別 example exa...

建構函式初始化問題

程式原始碼 include stdafx.h include include define pi 3.14 inline double sqr double x class ccircle void setradius double radiusval double getradius const ...