C++學習筆記——建構函式(一)
阿新 • • 發佈:2018-12-07
建構函式:
- 類中的特殊函式
- 用於描述初始化演算法
- 在物件被建立時使用特定的值構造物件,將物件初始化為一個特定的初始狀態
建構函式的形式:
- 函式名必須與類名相同
- 不能定義返回值型別,也不能有return語句
- 可以有形參,也可以沒有
- 可以時行內函數
- 可以過載
- 可以帶預設引數值
建構函式的呼叫時機: 在物件建立時候被自動呼叫(eg. Clock myClock(0,0,0))
預設建構函式:呼叫時可以不需要實參的建構函式
- 引數表為空的建構函式
- 全部引數都有預設值的建構函式
Clock(); Clock(int newH, int newM, int newS); //這兩個都是預設建構函式,如果在類中同時出現,將產生編譯錯誤
隱含生成的建構函式:在程式中未定義建構函式,編譯器會自動生成一個預設建構函式
- 引數列表為空,不為資料成員設定初始值;
- 如果類內定義了成員的初始值,則使用類內定義的初始值;
- 如果沒有定義類內初始值,則以預設方式初始化;
- 基本型別的資料預設初始化的值是不確定的。
“=default”:如果程式中已定義建構函式,預設情況下編譯器就不在隱含生成預設建構函式。如果此時依然希望編譯器隱含生成預設建構函式,可以使用“=default”。
class Clock{ public: Clock() = default; //指示編譯器提供預設建構函式 Clock(int newH, int newM, int newS); //建構函式 private: int hour, minute, second; };
例:
//類定義 class Clock{ public: Clock(int newH, int newM, int newS); //建構函式的原型宣告 void setTime(int newH, int newM, int newS); void showTime(); private: int hour, minute, second; }; //建構函式的實現 Clock::Clock(int newH, int newM, int newS): //:後面一排為初始化列表,用newH初始化hour這個變數 hour(newH),minute(newM),second(newS){ } //其他函式實現 int main(){ Clock c(0,0,0); //自動呼叫建構函式 c.showTime(); return 0; }