情況1:類中顯式定義了預設建構函式
此時new test()和new test並無區別,都會呼叫定義的建構函式,所以下面程式中的輸出結果一樣。
class test
int getnum()
};int main()
輸出結果:
1 1
請按任意鍵繼續. . .
情況2:沒有定義預設建構函式也沒有虛函式(此時編譯器會生成乙個預設建構函式,稱為合成建構函式)
此時new test()會呼叫合成建構函式,該建構函式會將類成員初始化,所以下面程式執行後會輸出0;new test不會呼叫合成建構函式,類成員n為隨機值。
class test
int getnum()
};int main()
輸出結果:
0 -842150451
請按任意鍵繼續. . .
情況3:對於內建型的變數,規則一致:
int* pna = new int;
int* pnb = new int();
cout << *pna << '\t' << *pnb << endl;
輸出結果:
-842150451 0
請按任意鍵繼續. . .
結論:所以平時還是得帶上()啊!
情況4:如果建立乙個物件,類中沒有顯示定義建構函式:
class test
int getnum()
};int main()
輸出結果:
0 -842150451 -858993460
請按任意鍵繼續. . .
注意:如果類中顯示定義了非預設建構函式且未顯示定義預設建構函式,則不能用new test 和new test() ,會提示錯誤! C new物件與直接宣告物件區別
剛開始使用基本資料型別的時候,相信大家都是直接像下面這樣直接宣告變數。int a double b 在學習了物件之後,發現可以用兩種方式宣告物件。class person intmain 那麼這兩種方式有什麼不同點呢?1.new出來的物件必須用指標接收,需要顯示的delete銷毀 2.記憶體位置不同...
c new 與new 的區別
new和delete運算子用於動態分配和撤銷記憶體的運算子 new用法 1.開闢單變數位址空間 1 new int 開闢乙個存放陣列的儲存空間,返回乙個指向該儲存空間的位址.int a new int 即為將乙個int型別的位址賦值給整型指標a.2 int a new int 5 作用同上,但是同時...
c new與malloc的區別
區別 1.malloc是c 語言的標準庫函式 而new是c 語言中的操作符。2.new返回指定型別的指標,並且可以自動計算所需空間的大小 而malloc必須要由使用者自己計算所需空間大小,並在返回後強行轉換為實際型別的指標。3.malloc只管記憶體分配,不能對所得的記憶體進行初始化,其所獲記憶體空...