缺省構造函數

《c++編程思想》閱讀筆記(6)

第4章:初始化與清除,內容太多,故分爲幾篇博客來進行歸納:)


缺省構造函數就是不帶任何參數的構造函數。當編譯器需要創建一個對象而又不知任何細節時,缺省的構造函數就顯得非常重要。比如,我們有一個類Y,並用它來定義對象:

Y y4[2] = {Y(1)};

編譯器就會報告找不到缺省的構造函數,數組中的第二個對象想不帶參數來創建,所以編譯器就去找缺省的構造函數。實際上,如果我們只是簡單地定義了一個個Y對象的數組:
Y y5[7];
或一個單一的對象:
Y y;
編譯器會報告同樣的錯誤,因爲它必須用一個缺省的構造函數去初始化數組中的每個對象。


缺省構造函數是如此重要,所以在一個構造類型(struct或class)中沒有構造函數時,編譯器就會自動創建一個。如下面的例子會正常運行:

class Z {
  int i;  // private
};  // no constructor
Z z, z2[10];

然而,一旦有構造函數而沒有缺省構造函數,上面的對象定義就會產生一個編譯錯誤


對於一個c++的新手來說,自動產生的缺省構造函數並不會使編程變得容易。它實際上要求與已有的c代碼保持向後兼容。在c中,創建一個struct數組的情況很常見,而在c++中,在沒有缺省構造函數時,這會引起一個編譯錯誤。
如果我們僅僅因爲風格問題就去修改我們的c代碼,然後用c++重新編譯,也許我們會很不樂意。當將c代碼在c++中編譯時,我們總會遇到這樣和那樣的編譯錯誤,但這些編譯錯誤都是c++編譯器所發現的c的不良代碼。因爲c++的規則更嚴格。事實上,用c++編譯器去編譯c代碼是一個發現潛在的錯誤的很好的方法。

(這篇有點短,因爲只剩這個內容了,有關該章的其他內容可以參考我的前兩篇博客:))

發佈了40 篇原創文章 · 獲贊 68 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章