例題:在下面的定義中,應填入的內容是()
class A
{
public:
void printf()
{
cout << DATA << endl;
}
void setData(double d)
{
data = d;
}
static int count;
private:
double d;
};
count = 0;
A、static int A:: B、int A::
C、int D、static int
這個題的正確答案是B,我當時選了A(原因是我對這一部分的知識點沒有搞清楚)。下面是關於這道題的解析:
在C++語言中,類的靜態成員必須在類內聲明,在類外初始化。因爲類的靜態成員屬於整個類,而不屬於某一個對象,如果在類內進行初始化,就會導致每一個成員對象都會包含這個靜態成員,這與C++語言的規定是矛盾的。唯一一個能在類內進行初始化的特例就是靜態常量成員,這是C++中語言中類內初始化的唯一一個特例。
總結一下靜態成員初始化的特點,特點如下:
1、靜態常量數據對象可以在類內初始化,也可以在類外初始化,即可以在實現文件中初始化,但是不能在構造函數中初始化,也不能在構造函數的初始化列表中進行初始化。
2、靜態非常量成員對象只能在類外進行初始化,即可以在實現文件中初始化,但是不能在構造函數中初始化,也不能在構造函數的初始化列表中進行初始化。
3、非靜態常量成員對象只能在構造函數的初始化列表中進行初始化,並且只能是這一個地方初始化非靜態常量。不能在構造函數中進行初始化,也不能在類內進行初始化。
4、非靜態非常量成員對象可以在構造函數中進行初始化,也可以在構造函數的初始化列表中進行初始化,按時不能在類內進行初始化。