类有时候需要它的一些成员与类本身相关,而不是与类的各个对象保持关联,这些成员往往被声明为静态成员。
-
静态成员的声明:
1、通过在成员的声明之前加上关键字static使得其与类关联在一起,静态成员可以是public或private的。静态数据成员的类型可以是常量、引用、指针、类类型等。
2、静态成员存在于任何对象之外,也就是说对象中不包含任何静态成员。静态成员从属于类。
3、静态成员不与任何对象绑定在一起,不包含this指针。静态成员函数不能声明成const的,也不能在static函数体内使用this指针。 -
类静态成员的使用:
1、使用作用域运算符访问静态成员;
2、使用类的对象、引用或者指针来访问静态成员;
3、成员函数不通过作用域运算符就能直接使用静态成员。 -
静态成员的定义:
1、和其他成员函数一样,我们既可以在类内也可以在类外定义静态成员函数。而在类外定义静态成员时,不能重复使用static关键字,static只出现在类内的声明中。
2、不能在类内初始化静态数据成员。
3、静态数据成员不属于类的任何一个对象,所以它们并不是在创建类的对象时被定义的,这意味着它们不是由类的构造函数初始化的。必须在类的外部定义和初始化每个静态成员,一个静态数据成员只能定义一次。
4、Tip:要想确保对象之定义一次,最好的办法是把静态数据成员的定义与其他非内联函数的定义放在同一个文件中。 -
静态成员能用于普通成员不能用的某些场景
1、静态数据成员可以是不完全类型。特别的,静态数据成员的类型可以就是它所属的类类型。而非静态数据成员只能声明成它所属的类型的指针或引用。
2、静态成员可以作为默认实参。
晚来天欲雪,能饮一杯无?