【總結】C++靜態成員變量的特性總結及測試用例

    靜態成員變量存放於數據段,在編譯時產生,故有以下特性:
    靜態成員變量實際爲類域中的全局變量,其初始化也應與全局變量一樣,不能再頭文件裏初始化,應與全局變量初始化的方式一樣,初始化時,靜態成員變量不收訪問限定符限定

Test.cpp:
class A
{
	static int _num;
};
int A::_num = 0;//初始化成功

    靜態成員變量被類內所有成員變量共享,也被派生類所有成員變量共享   

class B :public A
{
	
};
int main()
{
	A a;
	a._num++;
	B b;
	b._num++;
	cout << "b._num:" << b._num << endl;
	cout << "a._num:" << a._num << endl;
	return 0;
}

   

    靜態成員變量具有常量性,可以成爲成員類的可選參數,普通成員變量不具有常量性,所以不能作爲成員函數的可選參數      

class B :public A
{
public:
	void fun(int a = _num)//正確
	{

	}
	void fun1(int a = num)//報錯
	{

	}
private:
	int num;
};

    靜態成員變量可以聲明爲所屬類類型,鋪同成員變量不可以聲明爲所屬類類型,只能聲明爲所屬類類型的引用與指針(節點就是這麼來的)

class B :public A
{
public:
	void fun(int a = _num)//正確
	{

	}
	void fun1(int a = num)//報錯
	{

	}
private:
	int num;
	static B _bclass;//正確
	B _b1class;//錯誤
	B* _bclassptr;//正確,爲一指針
	B &_b2class;//錯誤,爲一引用
};

      

    由於靜態成員變量定義不在類體內,所以靜態數據成員的值在const成員函數中可以被合法的改變。

class A
{
public:
	static int _num;
};
int A::_num = 0;//初始化成功
class B :public A
{
public:
	void fun()const
	{
		_num++;//正確,const函數可以改變靜態成員變量
	}
private:
	int num;
};


本文出自 “pawnsir的IT之路” 博客,請務必保留此出處http://10743407.blog.51cto.com/10733407/1748604

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