静态成员
来源:互联网 发布:小轮公路车java 编辑:程序博客网 时间:2024/05/20 13:08
成员与类直接相关,而不是与类的某个对象保持关联。
1、声明静态成员
在成员声明之前加上static使得与类关联在一起。
静态成员可以是public或private的。
类的静态成员存在于任何对象之外,对象中不包含任何与静态数据成员有关的数据。
静态成员函数也不与任何对象绑定,他们不包含this指针。
静态成员函数不能声明为const,而且不能再静态成员函数中使用this指针。
2、使用类的静态成员
使用作用域运算符直接访问静态成员。
任然可以使用类的对象、引用或指针来访问静态成员。
成员函数不用通过作用域运算符就能直接使用静态成员。。
3、定义静态成员
既可以在类内定义,也可以在类外定义静态成员函数。
在类外部定义静态成员时,不能重复使用static关键字,该关键字只能出现类内部的声明语句。
因为静态数据成员不属于类的任何一个对象,所以它们并不是在创建类的对象时被定义的。也即是它们不是由类的构造函数初始化的。
不能在类的内部初始化静态成员。必须在类的外部定义和初始化每个静态成员。并且一个静态数据成员只能定义一次。
静态数据成员定义在任何函数之外,一旦定义,一直存在于程序的整个生命周期。
4、静态成员的类内初始化
可以为静态成员提供const整数类型的类内初始值。不过要求静态成员必须是字面值类型的constexpr。
如果在类的内部提供了初始值,则成员的定义不能再指定一个初始值。一般,即使一个静态数据成员在类内被初始化,也应在类外定义一下。
5、可用的场合
静态数据成员的类型可以是不完全型的。
静态数据成员的类型可以是它所属的类类型;非静态数据成员只能声明为它所属类的指针或引用。
class Bar{public: //...private: static Bar mem1;//yes Bar *mem2;//yes Bar mem3;//no};
可以使用静态成员作为默认实参
class Screen{public: //background表示一个在类中稍后定义的静态成员 Screen& cleaer(char = background);prviate: static const char background;};
0 0