c++類中成員變數包括主要四種:
普通成員變數,常量成員變數,靜態成員變數,靜態常量成員變數
上述成員變數該如何初始化,注意不是賦值。
由於普通成員變數和常量成員變數,每乙個類例項化,都乙份記憶體拷貝。c++規定成員變數在宣告(注意宣告與定義區別)時,不允許初始化,因此這些變數只能放在建構函式初始化列表中。
靜態成員變數所有類例項化,只有乙份記憶體拷貝,不能放在建構函式中初始化, 因為共享乙份記憶體。同時c++規定成員變數在宣告(注意宣告與定義區別)時,不允許初始化。所以只能定義時初始化。
靜態常量成員變數比較特殊化,即不能放在建構函式初始化列表中,也不能定義時初始化,那麼只能在宣告(注意宣告與定義區別)時,初始化。
宣告與定義簡單區別,宣告不分配記憶體,定義分配記憶體。類沒有產生物件,那麼成員變數沒有分配記憶體的,所有其成員變數為宣告。注意與c語言區別,c語言變數有時即是定義有時宣告, 例如int a;
另外常量成員函式,不能改變成員變數,例如賦值操作,但是可以改變區域性變數。
using namespace std;
#include
class test
int getval() const
};int test:: k=2; //定義靜態成員初始化
int main()
{int c;
test test(3);
cout<<"const:"<
cout<<"static:"<
cout<<"const&static"<
類成員變數初始化
在 c 中,類的成員變數未初始化問題,取決於物件建立方式,不同的建立方式,直接導致類成員變數的初值不同。本文通過下例,得出一下結論 1.在函式體內置立乙個物件,類成員變數和普通的區域性變數一樣,是乙個隨機值。2.建立乙個全域性成員物件,類成員變數和全域性變數一樣,編譯器賦值為 0。3.在函式體內 n...
c 類的成員變數初始化
最近在做乙個關於boost的專案,修改將原本的多個commandline進行合併精簡,合併成乙個path路徑,然後再加上不同的hardcode的檔名組成乙個完整的路徑。由於在使用ptree時會呼叫靜態方法建立乙個instance的類,因此這裡需要使用靜態成員變數。大概整理了一下以前沒有注意過的類的成...
c 成員變數初始化
include include using namespace std classa a a intmain 類a的成員變數將進行預設初始化 c 11新特性允許為資料成員提供類內初始值 include include using namespace std classa a a intmain a....