【C/C++】【類和物件】類內初始化和預設建構函式
阿新 • • 發佈:2020-07-16
類內初始化
c++11中,可以為類內成員變數提供一個初始值,在建立物件的時候,初始值就可以用來初始化該成員變數。在標頭檔案中可以賦初值。
const成員變數的初始化
兩種方式:
- 在標頭檔案定義時賦初值進行初始化
- 在建構函式的初始化列表中進行初始化,不可以通過賦值來初始化
//類定義(類宣告) 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;
};