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



 

你可能感兴趣的:(C++)