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; //错误
}