http://blog.csdn.net/jenghau/archive/2009/10/31/4752735.aspx 原文出自該連結,但是中間存在很多問題,經過本人修正。 1、普通的變數:一般不考慮啥效率的情況下 可以在建構函式中進行賦值。考慮一下效率的可以再建構函式的初始化列表中進行。 class CA { public: int data; public: CA(); }; CA::CA():data(0)//……#1……初始化列表方式 { //data = 0;//……#1……賦值方式 }; 2、static 靜態變數: static變數屬於類所有,而不屬於類的對象,因此不管類被執行個體化了多少個對象,該變數都只有一個。在這種性質上理解,有點類似於全域變數的唯一性。 class CA { public: static int sum; public: CA(); }; int CA::sum=0;//……#2……類外進行初始化 3、const 常量變數: const常量需要在聲明的時候即初始化。因此需要在變數建立的時候進行初始化。必須採用在建構函式的初始化列表中進行。 class CA { public: const int max; public: CA(); }; CA::CA():max(100) { …… } 4、Reference 引用型變數: 引用型變數和const變數類似。需要在建立的時候即進行初始化。也是必須在初始化列表中進行。 class CA { public: int init; int& counter; …… public: CA(); …… }; CA::CA():counter(init) { …… } 5、const static integral 變數: 對於既是const又是static 而且還是整形變數,C++是給予特權的。可以直接在類的定義中初始化。short可以,但float的不可以哦。 class CA { public: //static const float fmin = 0.0;// only static const integral data members can be initialized within a class const static int nmin = 0; public: }; 總結起來,可以初始化的情況有如下四個地方: 1、在類的定義中進行的,只有const 且 static 且 integral 的變數。 2、在類的建構函式初始化列表中, 包括普通變數,const常量(不包含第一種情況)和Reference變數。 3、在類的定義之外初始化的,包括static變數。因為它是屬於類的唯一變數。 4、普通的變數可以在建構函式的內部,通過賦值方式進行。當然這樣效率不高。 5.const資料成員(非static)必須在建構函式的初始化列表中初始化。 6.數群組成員是不能在初始化列表裡初始化的。 7.const static 和static const是一樣的,這樣的變數可以直接在類定義中初始化,也可以在類外。 說明了一個問題:C++裡面是不能定義常量數組的!因為5和6的矛盾。 類對象的構造順序是這樣的: 1.分配記憶體,調用建構函式時,隱式/顯示的初始化各資料成員 2.進入建構函式後在建構函式中執行一般計算 |