static类数据成员,即属于类的一种服务,可以在类没有实例对象的时候调用。所有类的对象共享一个副本,不像非static数据成员一个,每个对象维护着各自的副本。通常static 数据成员定义成private,通过调用static函数来访问。声明static数据成员时需要注意的一点就是如果没有提供默认的构造函数,则相应的static成员就需要在具体的.cpp文件中定义并声明,否则程序无法通过编译。
static数据成员或staic成员函数在头文件中定义需要关键字static,而源文件中数据成员的初始化和成员函数的定义不需要再写static。否则编译不通过
例:头文件 Employee.h
class Employee{
public:
Employee(const string &, const string &);
static int getCount();
~Employee();
private:
string firstName;
string lastName;
static int count;// 静态数据成员前需加static,若没有提供默认的构造函数,则需要自己初始化,否则不通过编译};
----------------------------------------------------------------------------
源文件Employee.cpp
int Employee::count = 0;//静态成员初始化为0
int Employee::getCount()//静态函数头文件中声明static,而源文件中不必要添写
{
return count;
}
总结:静态数据成员、静态成员函数独立于具体的对象而存在。作为类的属性而存在,类可以直接访问。如类Employee要访问静态成员函数,则可以通过二元域作用符来访问:Employee::count;//count为静态数据成员
常见编程错误:
1.在static成员函数中使用this指针是一个编译错误,原因为:static成员函数独立于对象而存在,而this指针是指向具体对象的指针,故无法在static函数中使用。
2.将static成员函数声明为const是一个编译错误,const 限定符指示函数不能修改对象的状态。而static函数成员独立于类的任何对象存在,而允许被修改。