C++中類內成員的定義,宣告總結(靜態和非靜態成員)
阿新 • • 發佈:2019-02-05
近學習到C++ primer中關於類中靜態變數的部分,有一道課後題非常有意思。
題目是關於靜態變數在類中的初始化。
class example{
public:
//static double rate=6.5;
static const int size;
std::vector<double> vec(size);
};
程式碼是這樣的。
當時我一看,覺得沒有錯誤啊。
於是編譯的時候總是出錯,如下圖。
這個錯誤提示說,這個型別是未定義的。
size這個變數不是const int型別的嗎,沒有問題啊。
在網上看了好幾篇文章之後懂了。
在C++中,類物件的構造順序是這樣的:
1.分配記憶體,呼叫建構函式時,隱式/顯示的初始化各資料成員
2.進入建構函式後在建構函式中執行一般計算
也就是說,在C++中,類中的成員在定義的時候不能被初始化,只有經過建構函式的構造之後才能被初始化。
所以在這裡,我們只能定義類中的靜態容器vector
像這樣:
static std::vector<double> vec;
這樣子才是正確的寫法。
C++中對於類中的靜態變數的初始化方式是先在類中定義,再在類外面初始化。
如果想在類中初始化這個vector容器的話,可以寫一個建構函式,比如:
class example{ public: vector<double> vec; example(): vec(5){} };
這樣子就可以解決了。最後總結一下關於類成員的定義和初始化:
1,類內成員在被定義時是不能被初始化的,只能通過建構函式來進行初始化。
2,類內靜態變數的初始化方式是先在類內定義,再到類外面進行初始化。