c++類的構造函數
阿新 • • 發佈:2018-02-19
規則 sign 就會 顯式 style def 參數 指針 eve 主要有以下三個原因:
1、構造函數
構造函數的任務是初始化類對象的數據成員,無論何時只要類的對象被創建,就會執行構造函數。
- 構造函數名與類名相同
- 沒有返回類型
- 可以重載
- 不能聲明成const
(1)合成的默認構造函數
如果我們沒有為類顯式的定義構造函數,編譯器會為我們隱式的定義一個默認構造函數(沒有任何參數)又叫做合成的默認構造函數)這個構造函數按照下面規則初始化類的數據成員:
- 如果有類內初始值,用它來初始化成員(比如上面的units_sold=0,revenue=0.0)。類內初始值必須以=或{}表示。
- 否則,默認初始化(如bookNo被初始化為空字符串)。
(2)自定義默認構造函數
一般情況下,類都需要定義一個默認構造函數,
- 一旦定義了其他構造函數,除非我們自己再定義一個默認構造函數,否則這個類將沒有默認構造函數。
- 若類中含有內置類型或復合類型(比如數組和指針)的數據,如果沒有提供類內初始值(有的編譯器可能不支持類內初始值),使用合成的默認構造函數的值將是未定義的。
- 如果類中包含其他類的對象,而這個對象沒有默認構造函數,那麽編譯器不能為類合成默認構造函數,我們必須自己定義一個默認構造函數。
Sales_data()=default;
函數名與類名相同,沒有參數列表,參數列表後面加上=default要求編譯器生成默認構造函數。
(3)構造函數初始值列表
Sales_data(const string & s,unsigned n,double p):bookNo(s),units_sold(n),revenue(p*n){}
冒號和花括號中間的部分就是構造函數的初始值列表。如果某個數據成員沒有被初始值列表包括,這個值將以與合成默認構造函數相同的方式隱式初始化,對於沒有初始值列表的構造函數,也是以同樣的方式初始化。
2、構造函數初始值列表
(1)必須使用構造函數初始值列表的類型
c++類的構造函數