試題練習總結(靜態成員的初始化)

例題:在下面的定義中,應填入的內容是()

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、非靜態非常量成員對象可以在構造函數中進行初始化,也可以在構造函數的初始化列表中進行初始化,按時不能在類內進行初始化。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章