預設建構函式
關於預設建構函式,請參見隨筆《類中函式》
請看測試**:
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,預期地執行了第乙個建構函式。但...