定義:類通過一個或幾個特殊的成員函數來控制其對象的初始化過程,這些函數叫做構造函數。
作用:構造函數的任務是初始化類對象的數據成員,無論何時只要類的對象被創建,就會執行構造函數。
Tips:構造函數不能被聲明稱const。
構造函數幾種形式:
- 默認構造函數(=default):如果類沒有顯示地定義構造函數,那么編譯器就會為類隱式地定義一個默認構造函數。
Solution() = default;
- 構造函數初始值列表:負責為新創建的對象的一個或幾個數據成員賦初值。
//初始化
Sales_data(const string &s, unsigned n, double p) : bookNo(s), units_sold(n), revenue(p*n) {}
- 在類的外部定義構造函數:
//賦值
Sales_data::Sales_data(const string &s, unsigned n, double p)
{
bookNo = s;
units_sold = n;
revenue = n * p;
}
初始化與賦值:
前者是直接初始化數據成員,后者則是先初始化再賦值。
如果成員是const或者是引用的話,必須將其初始化?;蛘?,當成員屬于某種類類型且該類沒有定義默認構造函數時,也必須將這個成員初始化。
隨著構造函數體一開始執行,初始化就完成了。因此,初始化const或者引用類型的數據成員的唯一機會就是通過構造函數初始值。
- 委托構造函數:使用所屬類的其他構造函數執行委托構造函數的初始化過程,或者說他把自己的一些或全部職責委托給了其他構造函數。