【总结】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

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