静态成员

来源:互联网 发布:小轮公路车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
原创粉丝点击