C 建構函式與預設建構函式

2022-06-13 07:27:11 字數 2145 閱讀 1650

建構函式:c++用於構建類的新物件時需要呼叫的函式,該函式無返回型別!(注意:是「無」! 不是空!(void))。

預設建構函式:未提供顯式初始值時,用來穿件物件的建構函式。

以上是二者的定義,但是單從定義很難對二者進行區別,下面依然看**。

1

class

testclass

2;

上面的注釋中已標出了預設建構函式和建構函式。下面,對二者的區別進行簡單直白易懂的總結:

1. 預設建構函式主要是用來完成如下形式的初始化的:

1

testclass classa;2//

或者 testclass *classa = new testclass;

在這種情況下,如果沒有提供預設建構函式,編譯器會報錯;

非預設建構函式在呼叫時接受引數,如以下形式:

1 testclass classa(12,'h'

);2//或者 testclass *classa = new testclass(12,'h');

2. 如果程式猿沒有定義任何建構函式,則編譯器會自動定義預設建構函式,其形式如  testclass() {};   可以看出,編譯器自動提供的預設建構函式是 啥也沒有啊 ;

3. 定義預設建構函式有兩種方式,如上述**展示的,一是定義乙個無參的建構函式,二是定義所有引數都有預設值的建構函式 ;

4. 注意:乙個類只能有乙個預設建構函式!也就是說上述兩種方式不能同時出現,一般選擇 testclass(); 這種形式的預設建構函式 ;

5. 只要程式猿定義了建構函式,編譯器就不會再提供預設建構函式了,所以,程式猿最好再手動定義乙個預設建構函式,以防出現 testclass a; 這樣的錯誤。

舉例:

#include using

namespace

std;

class

box ;

box::box(

int h,int w,int

len)

//或者

//box::box(int h,int w,int len):height(h),width(w),length(len)

//int

box::volume( )

intmain( )

可以看到,在建構函式中使用預設引數是方便而有效的,它提供了建立物件時的多種選擇,它的作用相當於好幾個過載的建構函式。 

它的好處是,即使在呼叫建構函式時沒有提供實參值,不僅不會出錯,而且還確保按照預設的引數值對物件進行初始化。尤其在希望對每乙個物件都有同樣的初始化狀況時用這種方法更為方便。

二、建構函式過載 

在乙個類中可以定義多個建構函式,以便提供不同的初始化的方法,供使用者選用。這些建構函式具有相同的名字,而引數的個數或引數的型別不相同。這稱為建構函式的過載。

1 #include 2

using

namespace

std;

3class

box ;

15 box::box() //

定義乙個無參的建構函式 16

21//

box::box(int h)

22//

25//

26//

box::box(int h,int w)

27//

3031 box::box(int h, int w, int

len) :height(h), width(w), length(len)

3234

35int

box::volume( )36

3940

intmain( )

41

以上**定義了四個過載構造和拿書,在建立物件時不指定引數,或者分別給定1個引數,2個引數和3個引數。

關於建構函式的過載的幾點說明: 

1、呼叫建構函式時不必給出實參的建構函式,稱為預設建構函式(default constructor)。顯然,無參的建構函式屬於預設建構函式。乙個類只能有乙個預設建構函式。如果在建立物件時選用的是無參建構函式,應注意正確書寫定義物件的語句。 

2、儘管在乙個類中可以包含多個建構函式,但是對於每乙個物件來說,建立物件時只執行其中乙個建構函式,並非每個建構函式都被執行。

C 的預設建構函式與建構函式

今天看書,忽然發現自己對預設建構函式 建構函式的理解很模糊,在實際專案中寫類時,這些細節問題並沒有涉及到。因此,就專門對著 c primer plus 將預設建構函式 構 造函式這一塊簡單總結一下。建構函式 c 用於構建類的新物件時需要呼叫的函式,該函式無返回型別!注意 是 無 不是空!void 預...

C 建構函式之預設建構函式

參考部落格 以下內容是在上述博主的部落格中提煉出來的 一 預設建構函式的含義是啥 主要就是 預設建構函式在呼叫的時候不需要顯示傳入實參的建構函式 二 預設的建構函式的分類 1 無參建構函式 就是沒有引數的建構函式 class sample 2 帶有形參,並且帶有預設值的建構函式 class samp...

C 預設建構函式

c 預設建構函式 一直認為若程式設計師沒有自己定義無引數的建構函式,那麼編譯器會自動生成預設建構函式,來進行對成員函式的初始化,但這種認為是有誤的,不全面的.預設的建構函式分為有用的和無用的,所謂無用的預設建構函式就是乙個空函式 什麼操作也不做,而有用的預設建構函式是可以初始化成員的函式。對建構函式...