1. 程式人生 > 實用技巧 >【C/C++】【類和物件】類內初始化和預設建構函式

【C/C++】【類和物件】類內初始化和預設建構函式

類內初始化

c++11中,可以為類內成員變數提供一個初始值,在建立物件的時候,初始值就可以用來初始化該成員變數。在標頭檔案中可以賦初值。

const成員變數的初始化

兩種方式:

  1. 在標頭檔案定義時賦初值進行初始化
  2. 在建構函式的初始化列表中進行初始化,不可以通過賦值來初始化
//類定義(類宣告)
class Time
{
private:
    int MilliSecond; //毫秒
public:
    void initMilliSecond(int mls);
public:
    int Hour; //小時
    int Minue; //分鐘
    int Second = 0; //秒鐘
    mutable int test; //測試變數
    const int ctestvalue = 80;  //定義了常量

    void initTime(int tmphour, int tmpmin, int tmpsec);
}
//建構函式列表
Time::Time():ctestvalue(70)
{
    Hour = 12;
    Second = 13;
    initMilliSecond(0);
    std::cout<<"呼叫了無參建構函式"<<std::endl;
}

預設建構函式

沒有建構函式,這些類物件如何初始化?

預設初始化, 通過一個特殊的建構函式來執行預設的初始化過程,這個特殊的建構函式就叫做預設建構函式 即無引數的建構函式

  • 原來,在類定義中如果沒有建構函式的情況下,編譯器就會為我們隱式的自動定義一個預設建構函式(無參) 稱為合成的預設建構函式。 合成的預設建構函式其實什麼也沒做,成員變數有初始化值給初始化值,沒有隨機初始化。
  • 一旦我們自己寫了一個建構函式,不管建構函式的引數個數是多少,編譯器都不會為我們建立“合成的預設建構函式”

=default和=delete

=default 編譯器能夠為這種的無參建構函式自動生成函式體,普通函式不能這樣寫, 帶引數的建構函式也不能這樣寫;

=delete 讓程式設計師顯式的禁用某個函式

//類定義(類宣告)
class Time2
{
public:
    Time2() =default; 
    Time2() =delete; 
public:
    int Hour;
    int Minute;
    int Second = 0;
};