在程序的任意点需要统计已创建特定类类型对象数量,或者类的错误处理历程的一个指针(即类的所有对象出错后的处理方法),或者类中的对象需要访问一个共同的变量时(如银行中的账户类,每个账户都有用户名,余额,利率等信息,而利率对所用用户是相同的)。在上述情况下,可以定义一个全局变量,然而全局对象会破坏封装,不仅相关的这个类可以访问此全局对象,用户代码也可以访问。因此类可以定义类静态成员,而不是定义一个可普遍访问的全局对象。

    static类成员:声明前带有关键字static的类成员。static类成员不是任意对象的组成部分,但由该类的全体对象共享。static类成员包含static数据成员和static函数成员。

static成员函数没有this形参,它可以直接访问所属类的static成员(包括static数据成员和其它static成员函数)。

使用static成员的优点:

(1)static成员的名字在类的作用域中,可以避免与其它类的成员和全局对象的名字冲突。

(2)可以实现封装,static成员可以是私有成员,而全局对象不可以。

(3)通过阅读程序可以容易看出static成员是与某个特定类关联的,这种可见性可清晰的显示程序员的意图。

与普通成员的不同:普通成员总是与对象关联,是某个对象的组成部分;而static成员于类关联,由该类的全体对象所共享,不是任意对象的组成部分。

使用类的static成员

        可通过作用域操作符从类中直接调用static成员,或者通过对象、引用或指向该类类型对象的指针间接调用。如:ac1.rate()   //rate()需为public  

                        ac2->rate()  //rate()需为public

                        Account::rate()