1. 程式人生 > >C++學習筆記——建構函式(一)

C++學習筆記——建構函式(一)

建構函式:

  • 類中的特殊函式
  • 用於描述初始化演算法
  • 在物件被建立時使用特定的值構造物件,將物件初始化為一個特定的初始狀態

建構函式的形式:

  • 函式名必須與類名相同
  • 不能定義返回值型別,也不能有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;
}