21 March 2013
如果要在程序任意点统计已创建特定类型的数量,就需要一个全局变量。但是全局变量会破坏封装。static数据成员可以解决这个问题。

如果要在程序任意点统计已创建特定类型的数量,就需要一个全局变量。但是全局变量会破坏封装。static数据成员可以解决这个问题,并且可以通过将该成员定义成private来实现封装。

  • static是存储说明符,其具有唯一性。static数据成员对全体对象共享,全体对象共享一个static数据成员。
  • static数据成员可以声明为任意类型,常量、引用、数组、类类型。
  • 静态数据成员实际上是类域中的全局变量,static并不能通过类构造函数来进行初始化。所以,静态数据成员的定义(初始化)不应该被放在头文件中。必须在类定义体外部定义一次。static 成员变量在类内部声明,在类外部定义,定义的时候才真正分配空间。
  • static成员不是类对象的组成部分。

    #include using namespace std;

    class Test { public: static int counter; // counter被所有对象共享 Test() { counter++; // 每调用一次构造函数,counter加1 } };

    int Test::counter; // static变量定义和初始化

    int main() { Test a; // 自动调用构造函数 Test b; // 第二次调用构造函数 cout « Test::counter « endl; return 0; }

  • const static。static定义的类成员变量不能在类中初始化,使用const static来实现类中初始化。但是在类外部仍然需要进行定义。不过由于const的作用,该变量只能共享使用不能修改其值。

原文链接:STATIC数据成员,转载请注明来源!

EOF