7.6 类的静态成员

7.6 类的静态成员

静态成员的特性

  • 静态成员属于类,而不是对象。
  • 类型可以是类对象、指针、引用、常量等。
  • 静态成员函数不能声明为const类型。

使用静态成员

  • 类外使用作用域符::访问。
  • 当然也可以通过类对象访问,例如a.static()。
  • 成员函数访问时无需通过作用域符。

定义静态成员

  • 类外定义时不能再使用static关键字。
  • 一般在类的外部和初始化静态成员。
  • 静态成员只能定义一次,存在于程序的整个生命周期内。
  • 即使在类内初始化了静态成员,在类外最好也定义一次,当然不能再初始化它了。
  • 如果在类内初始化静态成员,静态成员必须是字面值常量的constexpr,为其提供const整数类型的初始化值,例如:
class A
{
 public:

  static    constexpr int val = 30;
  int array[val];
}

静态成员和普通成员的一些区别

  • 静态成员可以作为函数的默认实参,例如
class A
{
public:

  void setAge(int age = default);

  static const int default;
}
  • 静态成员可以像指针一样是不完整类型,例如
class A
{
public:

  void setAge(int age = default);

  static A instance;  //正确
  
  A* m_pA;   //正确

  A  m_a;  //错误
}

你可能感兴趣的:(7.6 类的静态成员)