static
static这个关键字在c中有两个完全不相干的两种语义,在函数局部用来修饰局部变量,函数前面用来将函数的作用域限定在本文件中。为了尽可能的减少关键字,所以c++又给static定义了第三种完全不相干的语法,在类中用来修饰静态成员。
static用在成员变量,那么就是静态成员变量;static用在成员函数,那么就是静态成员方法;
static成员实例化
经过static修饰后的成员属于类本身而不属于对象,在定义对象的时候不会去实例化静态成员变量,所以需要对其进行独立定义,示例如下,静态成员函数则不需要单独初始化,因为函数实体编写在外部,本身就是一种初始化。
class person //定义一个person类
{
public:
static int a; //声明一个静态成员变量a
};
int person::a=23; //定义静态成员变量并初始化
静态数据成员不能在类中初始化,因为类型定义只是定义了一个模板。也不能在构造函数中初始化,因为静态变量是多个对象共享的,假如构造函数能初始化,那么类每创建一个对象都会改变静态成员的值,就乱套了,当然也不能用初始化列表来初始化,初始化时如果不赋初值,默认等于0。