new物件時,類名後加括號與不加括號的區別

2021-08-10 06:06:51 字數 1246 閱讀 1655

預設建構函式

關於預設建構函式,請參見隨筆《類中函式》

請看測試**:

1 #include 2

using

namespace

std;34

//空類

5class

empty6;

89//乙個預設建構函式,乙個自定義建構函式

10class

base11;

18 base(int

nvalue) 19;

2324

private:25

intm_nvalue;

26};

2728

//乙個復合預設建構函式

29class

custom

3037

38private:39

intm_nvalue;

40};

4142

void

main()

4364

//result:

65/*

66default base construct

67default base construct

68custom base construct

69default && custom construct

70default && custom construct

71*/

至此足以。

加括號與不加的區別

(1)加括號

1. 若括號為空,即無實參項,那麼理解為呼叫預設建構函式;

2. 若括號非空,即有實參項,可以理解為呼叫過載建構函式,或復合預設建構函式。

(2)不加括號

呼叫預設建構函式,或復合預設建構函式。

預設建構函式 與 復合預設建構函式的區別

預設建構函式:編譯器會為每乙個類預設提供乙個建構函式,稱之為預設建構函式。預設建構函式一般引數為空。

復合預設建構函式:乙個由使用者自定義的所有形式引數都賦有預設值的建構函式,稱之為復合預設建構函式。

兩者聯絡:

乙個類中,若一旦有乙個使用者自定義建構函式,那麼由編譯器提供的預設建構函式就不再存在。

使用者自定義的建構函式為預設建構函式的過載版。

預設建構函式不復存在時,使用者必須為這個類再自定義乙個復合預設建構函式(選所有自定義建構函式其中之一,把形式引數均賦預設值即可)。

不論自定義建構函式(即建構函式的過載版)有多少個,只允許有乙個復合預設建構函式。

new物件時,類名後加括號與不加括號的區別

include using namespace std 空類 class empty 乙個預設建構函式,乙個自定義建構函式 class base base int nvalue private int m nvalue 乙個復合預設建構函式 class custom private int m nv...

new 物件加括號和不加括號的區別

在new物件的時候有加上 有不加 不知道這個到底是什麼區別?比如 cbase base new cderived cbase base new cdeviced 很多人都說,加括號呼叫沒有引數的建構函式,不加括號呼叫預設建構函式或唯一的建構函式。這是有問題的。對於自定義類型別 如果該類沒有定義建構函...

C 建立類物件時(無參)後不加括號與加括號的區別

在不考慮用new動態建立物件的情況下,用最普通的 類名 物件名 引數 的方法建立物件 先貼上最正常最普通的 includeusing namespace std class c c intm private intn int main ok,現在我們看看執行結果 ok,預期地執行了第乙個建構函式。但...