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的特性。
补充:软件开发 , C++ ,