作者:jicanmeng
时间:2014年11月30日
在类中,静态成员变量是使用static修饰的成员变量,它是由所有这个类的对象所共享的。类似的,静态成员函数是使用static修饰的成员函数,它由所有这个类的对象所共享。
静态成员变量的使用方法如下:
看一个示例程序:
#include <iostream> class Something { public: static int s_nValue; }; int Something::s_nValue = 1; int main() { Something cFirst; cFirst.s_nValue = 2; Something cSecond; std::cout << cSecond.s_nValue << std::endl; Something::s_nValue = 3; std::cout << cSecond.s_nValue << std::endl; return 0; }
看一看运行结果:
[jicanmeng@andy tmp]$ g++ staticMemberVar.cpp
[jicanmeng@andy tmp]$ ./a.out
2
3
[jicanmeng@andy tmp]$
几点说明:
1. 静态成员变量的实际定义和初始化本身是不受public,protected和private访问属性限制的。
2. 静态成员变量是属于类的,可以通过"<类名>::<静态成员变量名>"的方式来访问(如上面代码中的19行)。另外,当静态成员变量的访问属性为public时,也可以通过"对象.静态成员变量名"的方式来访问。
静态成员函数和静态成员变量一样,是属于类的,并且被所有的类的对象所共享。可以通过"<类名>::<静态成员函数名>"的方式来访问。另外,当静态成员函数的访问属性为public时,也可以通过"对象.静态成员函数名"的方式来访问。
有一点需要注意:静态成员函数只能访问静态成员变量。
看一个示例程序:
#include <iostream> class IDGenerator { private: static int s_nNextID; public: static int GetNextID() { return s_nNextID++; } }; // We'll start generating IDs at 1 int IDGenerator::s_nNextID = 1; int main() { for (int i=0; i < 5; i++) std::cout << "The next ID is: " << IDGenerator::GetNextID() << std::endl; return 0; }