C++种静态成员的初始化和用法探讨

C++类静态成员的初始化和用法探讨

一、一般类型的类的静态变量

1.首先看下面的代码:

class CTest1
{
public:
	static int m_num1;
	void printNum(){cout << m_num2 << endl;};
	void SetNum2(int i){m_num2 = i;};
	static void printNum2(){cout << m_num2 << endl;};
	static void printNum3(){cout << m_num3 << endl;};

private:
	static int m_num2;
protected:
	static int m_num3;

};

int CTest1::m_num1 =1;
int CTest1::m_num2 =2;
int CTest1::m_num3 =3;

int main()
{
	cout << CTest1::m_num1 << endl;
	//cout << CTest1::m_num2 << endl;//这样编译报错
	//cout << CTest1::m_num3 << endl;//这样编译报错
	CTest1::printNum2();//通过静态函数打印
	CTest1::printNum3();//通过静态函数打印


	CTest1 t1;
	t1.printNum();

	CTest1 t2;
	t2.printNum();

	t1.SetNum2(20);
	t1.printNum();
	t2.printNum();

	t2.SetNum2(30);
	t1.printNum();
	t2.printNum();


	CTest1::m_num1 = 10;


	return 0;
}

2.测试结果:

1
2
3
2
2
20
20
30
30

3.结论:

1).public类型的类的静态变量,可以在类外面进行初始化,也可以在别的函数里通过“类名::变量”(比如:CTest1::m_num1)进行访问和操作。

2).private、protected,可以在类外面进行初始化,不能通过“类名::变量”访问和操作,可以定义public类型的静态函数,通过“类名::函数”进行访问和操作;也可以通过定义类的对象,通过对象调用函数来访问和操作。

3).类的静态变量,在一个对象(或者类外)改变和操作后,其他所有的地方都会相应改变,比如t1和t2的操作。

这个特点可以用来计算一个类的对象被使用了多少次,变量初始化为0,比如new的时候变量++,delete的时候变量--,当变量为=0时候,可以销毁这个类的对象。

二、const类型的类的静态变量

1.首先看下面的代码:

class CTest2
{
public:
	CTest2(int i, char* str)
	{

	}
	static const int m_num1;//static const int m_num1 =16;//VC中这样不行
	static const char* m_name;//static const char m_name[m_num1];//VC中这样不行
};

const int CTest2::m_num1 =1;
const char* CTest2::m_name="121212"; 

int main()
{
	cout << CTest2::m_num1 << endl;

	//CTest2::m_num1 =10;//这样会编译报错。

	return 0;
}

2.结论

public类型的类的const类型的静态变量,可以在类外面进行初始化,也可以在别的函数里通过“类名::变量”(比如:CTest1::m_num1)进行访问,但不能被改变,这个是const的特性。



转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12193551