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