C++ 學習之構造函數:構造函數小結1

談到C++的類,就必然少不了構造函數這個概念,下面是自己學習C++ primer後對構造函數一些知識點的總結和理解

在創建類對象的時候,必然要執行構造函數,構造函數的功能是保證每個對象的數據成員具有合適的初始化。構造 函數是特殊的成員函數,它的名字與類型名稱相同,而且沒有返回值類型。構造函數可以重載,構造函數不能聲明爲const,即使創建的對象是const的。因爲不管對象是不是const,const只是防止修改對象的數據成員,而構造函數只是對對象的數據成員進行初始化,談不上修改。

下面來舉個書上的例子示意說明一下:

程序:

程序運行,採用初始化1的方式,我們可以看到如下結果:

原因是,此時對象初始化時調用的是Sales_item():units_sold(0),revenue(0.0){}。此處用到了構造函數初始化列表,後面詳細說明。

但此處要注意,Sales_item item; 不要寫成Sales_item item();,這樣便成了聲明一個item函數,而類體中沒有這樣的函數定義。

採用初始化2的方式,可以看到如下結果:

原因是,此時對象初始化時調用的是Sales_item(istream&a){string b; a>>b; isbn=b; units_sold=0;revenue =0.0;},用戶可以通過輸入一個字符串給isbn賦值。

採用初始化3的方式時,結果如下:

原因是此時調用的構造函數是Sales_item(const string &str):isbn(str),units_sold(0),revenue(0.0) {}。注意此處構造函數的形參最好使用const string &str,const引用,否則像程序中的字符串字面值的方式時非法的,因爲字符串字面值是一個const的字符數組。如果使用string &str,只能用一個string類的對象進行初始化,會縮小構造函數的應用範圍。

當初始化const對象時,如方式4,此時想上文所說的,不用將構造函數也聲明爲const,我們可以看下運行結果:

可以看到,const對象仍然可以調用Sales_item():units_sold(0),revenue(0.0){}進行正常的初始化。

在Sales_item():units_sold(0),revenue(0.0){}構造函數中我們可以接觸到一個新的而又常被人忘記的概念,構造函數初始化列表。

構造函數初始化列表以一個冒號:開始,接着是一個以逗號分隔的數據成員列表,每個數據成員後面跟着一個圓括號的初始化式。

篇幅限制,具體總結見本人博客C++ 學習之構造函數:構造函數小結2

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