作者: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;
}