Static类成员

来源:互联网 发布:java商城项目源码 编辑:程序博客网 时间:2024/05/17 07:56

                    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函数成员独立于类的任何对象存在,而允许被修改。

 

转自我的个人技术网站


原创粉丝点击