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變量類似。需要在創建的時候即進行初始化。也是在初始化列表中進行。但需要注意用Reference類型。
class CA
{
public:
int init;
int& counter;
……
public:
CA();
……
};
CA::CA():counter(&init)
{
……
}
5、const static integral 變量:
對於既是const又是static 而且還是整形變量,C++是給予特權的(但是不同的編譯器可能有會有不同的支持,VC 6好像就不支持)。可以直接在類的定義中初始化。short可以,但float的不可以哦。
// 例float類型只能在類外進行初始化
// const float CA::fmin = 3.14;
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、普通的變量可以在構造函數的內部,通過賦值方式進行。當然這樣效率不高。
類的定義體中只能初始化const integral data型的量。對於static型的量,那就放在.cpp文件中吧!當然了,還不能放在成員函數中,因爲static量是類的,不是某個對象的。那樣的話每個對象都來操作屬於所有對象(類)的東西,豈不是會亂套,所以不能允許這種行爲。
但是,static量可以在類的構造函數中賦值,當然是不可以放在初始化成員列表中的,可是在構造函數中賦值時不可以使用copy
construction,提示這樣的錯誤:
term does not evaluate to a function taking 1 arguments
那麼,對於類裏面的static函數的聲明和定義是這樣的:
static函數的聲明可以像普通成員函數一樣聲明,只是在前面加上一個static關鍵字。
如:
private:
static int GetXYZ();
而在,定義時,像static變量那樣,也是不可以加上static關鍵字,若寫成:
static int A::GetXYZ()
{
…………
}
就會提示:
'static' should not be used on member functions defined at file scope
所以應該寫成是這樣:
int A::GetXYZ()
{//他是static型函數的性質,就用其他方法來辨別吧,比如在這兒寫上:this
is a static function
…………
}
至於static函數的使用,可以再你所編寫的代碼段中這樣插入:
………………
A::GetXYZ(); //可以看出他是類的東東,不是對象的
………………
當然,對於public型的static量(假設叫CString
S_str),可以這樣使用:
A::S_str = "Hello !";
CString str = A::S_str;
c++成員變量初始化問題 分類: c/c 小結 2009-11-03 17:19
C++爲類中提供類成員的初始化列表
類對象的構造順序是這樣的:
1.分配內存,調用構造函數時,隱式/顯示的初始化各數據成員
2.進入構造函數後在構造函數中執行一般計算
1.類裏面的任何成員變量在定義時是不能初始化的。
2.一般的數據成員可以在構造函數中初始化。
3.const數據成員必須在構造函數的初始化列表中初始化。
4.static要在類的定義外面初始化。
5.數組成員是不能在初始化列表裏初始化的。
6.不能給數組指定明顯的初始化。
這6條一起,說明了一個問題:C++裏面是不能定義常量數組的!因爲3和5的矛盾。這個事情似乎說不過去啊?沒有辦法,我只好轉而求助於靜態數據成員。
到此,我的問題解決。但是我還想趁機複習一下C++類的初始化:
1.初始化列表:CSomeClass::CSomeClass() : x(0), y(1){}
2.類外初始化:int CSomeClass::myVar=3;
3.const常量定義必須初始化,C++類裏面使用初始化列表;
4.C++類不能定義常量數組。
關於const,複習一下常量指針:
如果const位於星號的左側,則const就是用來修飾指針所指向的