1.静态数据成员
整个类所有对象共享的数据,方法是在数据成员前加上static关键字
class SavingAccount//类的定义
{
char name[20]; //存户姓名
char addr[60]; //存户地址
double total; //存款额
static double rate; //利率
…
}
类的定义只是给出了对象构成的说明,真正的存储空间是在对象定义时分配的。系统为对象分配空间时,并不再为静态数据成员分配空间。
静态数据成员的定义一般出现在类的实现文件中。比如在类SavingAccount的实现文件中,这样定义:
double SavingAccount::rate=0.05;
注意:
1.静态数据成员不属于对象的一部分,而是类的一部分;
2.静态数据成员的初始化不能放在类的构造函数中;
3.类定义并不分配空间,空间是在定义对象时分配,类的静态数据成员拥有一块单独的存储区,而不管创建了多少个该类的对象。所有这些对象的静态数据成员都共享这块空间。.但静态数据成员属于类,因此定义对象时并不为静态成员分配空间。
4.可以通过作用域操作符从类直接调用。如: SavingAccount::rate ,它似乎又是对象的一部分,因此又可以从对象引用它。如有个SavingAccount类的对象obj,则可以用:obj.rate.由于是整个类共享的,因此不管用哪种调用方式,得到的值都是相同的 。
2.静态成员函数
静态的成员函数是为类的全体对象服务,而不是为某个类的特殊对象服务。静态成员函数不需要借助任何对象就可以被调用,所以编译器不会为它暗加一个this指针。因此,静态成员函数无法处理类中的非静态成员变量。
静态成员函数的声明只需要在类定义中的函数原型前加上保留词static。 访问方式:
类名::静态成员函数名();
对象名.静态成员函数名()
定义静态成员函数的主要目的是访问静态的数据成员,不能访问一般的数据成员。静态成员函数可定义为内嵌的,也可在类外定义。在类外定义时,不用static。
3.静态常量成员
整个类的所有对象的共享常量。声明:
static const 类型 数据成员名 = 常量表达式;
注意const数据成员和static const数据成员的区别
常量数据成员属于各个对象,不同对象的常量数据成员的值可以不同,静态常量数据成员是属于整个类,不同对象的的同一个静态常量数据成员值在一样的。
静态常量数据成员可以并且必须在类定义时初始化。
class sample {
static const int SIZE = 10;
int storage[SIZE];
…
};