总结C++静态成员变量的特性总结及测试用例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结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/1748567

以上是关于总结C++静态成员变量的特性总结及测试用例的主要内容,如果未能解决你的问题,请参考以下文章

C++特性总结

C++内存泄露及常见情况总结

总结C++与C#中的static静态修饰符

class中static总结-静态成员函数和静态成员变量

C++中的类所占内存空间总结

C++初级static用法总结问题探讨及常见错误排查