1. 程式人生 > >C++中類內成員的定義,宣告總結(靜態和非靜態成員)

C++中類內成員的定義,宣告總結(靜態和非靜態成員)

近學習到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,類內靜態變數的初始化方式是先在類內定義,再到類外面進行初始化。