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

2021-09-14 06:01:14 字數 1015 閱讀 8831

#include using namespace std;

// 空類

class empty

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

class base

; base(int nvalue)

;private:

int m_nvalue;

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

class custom

private:

int m_nvalue;

};void main()

// result:

/*default base construct

default base construct

custom base construct

default && custom construct

default && custom construct

*/

一、加括號與不加的區別

(1)加括號

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

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

(2)不加括號

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

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

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

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

(3)兩者聯絡:乙個類中,若一旦有乙個使用者自定義建構函式,那麼由編譯器提供的預設建構函式就不再存在。使用者自定義的建構函式為預設建構函式的過載版。預設建構函式不復存在時,使用者必須為這個類再自定義乙個復合預設建構函式(選所有自定義建構函式其中之一,把形式引數均賦預設值即可)。不論自定義建構函式(即建構函式的過載版)有多少個,只允許有乙個復合預設建構函式。

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

預設建構函式 關於預設建構函式,請參見隨筆 類中函式 請看測試 1 include 2 using namespace std 34 空類 5class empty6 89 乙個預設建構函式,乙個自定義建構函式 10class base11 18 base int nvalue 19 2324 pr...

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,預期地執行了第乙個建構函式。但...