类中的静态成员

在C++中,静态成员是属于整个类的而不是某个对象,在类定义时,就为静态成员(函数或变量)分配好了内存空间,静态成员变量只存储一份供所有对象共用,因此在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。

静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即<类名>::<静态成员名>。

static成员的特点:

  1. 静态成员函数中不能调用非静态成员,这是因为静态成员函数在类定义时就被分配内存空间,而非静态成员需要实例化之后才会被分配内存空间
  2. 非静态成员函数中可以调用静态成员。因为静态成员属于类本身,在类的对象产生之前就已经存在了,所以在非静态成员函数中是可以调用静态成员的
  3. 静态成员变量使用前必须先初始化(如int MyClass::m_nNumber = 0;),否则会在编译链接时会出错
  4. 不能再类的构造函数中进行初始化,需要单独进行初始化操作

static成员的优点:

  • static成员的名字是在类的作用域中,因此可以避免与其它类成员或全局对象名字冲突
  • 可以实施封装,static成员可以是私有的,而全局对象不可以
  • 阅读程序容易看出static成员与某个类相关联,这种可见性可以清晰地反映程序员的意图