c++缺省構造函數

c++缺省構造函數

書寫實驗報告時發現一個問題,首先寫了一個類

在這裏插入圖片描述
如果說寫這個程序的人是爲了不讓編譯器產生缺省構造函數,那麼他顯然達到了這個目的。
在這裏插入圖片描述
但實際上在public中已經有構造函數的情況下,編譯器是不會產生缺省構造函數的,因此如果去掉private裏面的Date(){}該程序依舊會報錯。
那如果把自己寫的構造函數全部放在private裏面呢,讓public裏面沒有構造函數,編譯器會產生缺省構造函數嗎?
在這裏插入圖片描述
很可惜,我們實驗的結果告訴我們只要在class裏面定義了構造函數,編譯器就不會產生默認的構造函數。

內嵌對象

內嵌對象用的不多,網上也很少有這方面的介紹,恰好我寫的這個實驗用到了內嵌對象,我繼續使用上面介紹的Data類,但是在public裏面聲明構造函數且不允許參數缺省,類似於本文章第一張圖片,然後定義另一個類people在裏面內嵌對象,該對象的類就是Data,如果我們要實現這個people類的缺省構造函數應該怎麼辦呢?
在這裏插入圖片描述
我首先嚐試了不寫構造函數,讓編譯器產生缺省構造函數,但是失敗了,失敗的原因其實很容易想到,因爲要缺省構造people,那麼就一定會缺省構造裏面的Data,但可惜的是Data類並不存在缺省構造函數,因此people類也不可能存在缺省自構函數。
在這裏插入圖片描述
下面把Data類的缺省構造函數寫入public,再次進行上述相同的實驗。
在這裏插入圖片描述
在這裏插入圖片描述
成功編譯,在此我們摸清了嵌入對象類的缺省構造函數用法,它必須保證自己所有的元素能夠缺省自構,那麼它纔可以缺省自構,並且必須存在缺省自構函數在public裏面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章