static数据成员独立于该类的任意对象存在,每个数据成员是与该类关联的对象,并不是与该类的对象相关联.
例如,static数据成员的类型可以是该成员所属的类类型,非static成员被限定声明为其自身类对象的指针或引用.
class Bar
{
private:
static Bar men1;//OK
Bar *men2;//OK
Bar men3;//error
};
static数据成员可做默认实参,非static数据成员不能做默认实参,它的值不能独立于所属兑现而使用.
class Screen
{
public:
Screen &Clear( char=background );
private:
static const char background='#';
};
static函数没有this指针:因为static成员是类的组成部分但不是任何对象的组成部分.通过使用非static成员现实或隐式地引用this是一个编译时错误.
static数据成员必须在类定义体的外部定义,因为static成员不是通过类构造函数进行初始化而是自定义进行的.但有个特殊:const static成员只要初始化式是一个常量表达式,就在类的定义体中进行初始化.
class Account
{
private:
static int interest_rate;
static const int period=30;//static const
};
int Account::inetest_rate=10;//static
const int Account::peried;//static const
一个类的静态成员函数不能相非静态成员函数那样"默认调用"它的非静态成员函数(因为静态成员函数没有隐含的this指针)在一个类的静态成员函数中,只要通过某种方式得到了一个指向本类型的对象的指针,并且有合适的access level.就可以对此对象调用其非静态成员函数.
作用:
1.可以用来保存对象的个数
2.作为标记,标记一些动作是否发生.比如:文件的打开状态
3.存储.链表的第一个或者最后一个的内存地址