課程
/后端開發
/C++
/C++遠征之封裝篇(上)
默認構造函數是沒有實參的構造函數,那如果這樣子的話和不聲明默認構造函數而系統自動聲明的有什么區別呢?
2018-03-26
源自:C++遠征之封裝篇(上) 6-6
正在回答
區別:
1、構造函數的函數名稱與類名同名,其他方法(函數)名稱可以自定義。
2、構造函數僅在對象被創建時系統會根據給定的參數以及類中的構造函數定義進行選擇調用,如果類中沒有定義構造函數,系統默認會提供一個無參構造空函數,什么都不會做,只是滿足接口要求,構造函數不能被顯式調用。其他函數根據程序員需要而調用,且必須顯式調用。
3、由于對象創建后,系統必須返回新建對象的地址,賦值給指針變量(C++,C#中是將引用賦值給對象變量,其實一樣,內部也是對象地址),那么換句話說,返回接口被系統占用了,因此構造函數就不能返回任何類型值,所有帶返回值構造函數的定義編譯器都不會通過。結果就是構造函數沒有也不能有返回類型,而其他函數隨意。
4、由于構造函數的作用只是在創建對象時用來初始化成員變量和對象的,因此構造函數不能被繼承也不能使用接口。換句話說,因為構造函數只在對象創建時會被調用,其他情況下永遠不會被調用,因此如果對一個類定義一個接口,接口中提供了構造函數的接口的話,該函數接口是永遠無法被顯式調用的,顯得多余了,因此如果為構造函數定義接口,編譯器會報錯。(new一個對象的時候new的是類,不會new接口)
舉報
封裝--面向對象的基石,本教程力求幫助小伙伴們即學即會
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-03-26
區別:
1、構造函數的函數名稱與類名同名,其他方法(函數)名稱可以自定義。
2、構造函數僅在對象被創建時系統會根據給定的參數以及類中的構造函數定義進行選擇調用,如果類中沒有定義構造函數,系統默認會提供一個無參構造空函數,什么都不會做,只是滿足接口要求,構造函數不能被顯式調用。其他函數根據程序員需要而調用,且必須顯式調用。
3、由于對象創建后,系統必須返回新建對象的地址,賦值給指針變量(C++,C#中是將引用賦值給對象變量,其實一樣,內部也是對象地址),那么換句話說,返回接口被系統占用了,因此構造函數就不能返回任何類型值,所有帶返回值構造函數的定義編譯器都不會通過。結果就是構造函數沒有也不能有返回類型,而其他函數隨意。
4、由于構造函數的作用只是在創建對象時用來初始化成員變量和對象的,因此構造函數不能被繼承也不能使用接口。換句話說,因為構造函數只在對象創建時會被調用,其他情況下永遠不會被調用,因此如果對一個類定義一個接口,接口中提供了構造函數的接口的話,該函數接口是永遠無法被顯式調用的,顯得多余了,因此如果為構造函數定義接口,編譯器會報錯。(new一個對象的時候new的是類,不會new接口)