类数据成员
C++ 类中有一种类型成员, 属于类本身, 而不属于类的对象, 这种类型成员成为类成员, 而属于对象的成员成为对象成员或实例成员. 可以使用关键字 static 来创建一个类成员.
static 声明与定义
在类声明内部声明的 static 数据成员必须在任何程序块之外定义. 通过外部定义将 C::n 初始化为 0, 但这不是必须的, 因为在创建第一个对象时, 所有的静态数据都会被初始化为零, 除非提供一个不同的初值. 并且在类体外定义的, 不必使用 static
static 数据成员不会影响该类及其对象的 sizeof.
类成员函数
除了 static 数据成员, 类还可以有 static 成员函数. 静态成员函数只能访问其他的 static 成员, 包括数据成员和成员函数.
静态成员函数与非静态成员函数差别是: 非 static 成员函数既可以访问 static 数据成员, 也可以访问非 static 数据成员; 而 static 成员函数只能访问 static 成员.
类的 static 成员的访问
有两种不同方式来访问类的 static 成员, 既可以通过 C 的对象来访问, 也可以直接通过类 C 来访问.
在类成员函数内定义 static 变量
输出结果:
本例在成员函数 m 中定义了一个 static 变量 s, 由于 s 定义在程序块内, 他拥有程序块范围, 因为只能在 m 内部访问. 每调用 m 一次, s 就会相应的增加一次, 又因为 m 是 C 的成员函数, 所以 C 的所有对象都共享这个静态局部变量, 这样, 对 m 的每一次调用访问的都是同一个 s, 同样, 对于静态局部变量 n 来说, 它也是一个静态局部变量, 所以 C 的所有对象也都共享这个局部变量.
来源: http://www.jianshu.com/p/13f3b2ae7e2c