- 静态成员的作用
有时候一些成员不是打算由类的各个对象(类的实例)来各自维护,而是与类本身直接相关联
例:一个银行账户类,可以实例化出很多个对象(很多客户)A,B,C……,但是像利率这种信息,是对大家一样同时又是不断变动的,静态成员的作用就体现出来了:大家共享一个可变信息
- 声明静态成员
class Account{
public:
static double rate(){return interestRate;}
private:
string owner;
double amount;
static double interestRate;
static double initRate();
};
静态成员存在于任何对象之外,每个Account对象包含两个数据成员:owner和amount,但interestRate只有1个且被所有Account对象共享
注意: 静态成员函数不与任何对象绑定,它们不包含this指针,不能被声明成const,不能在static函数体内使用this指针
- 定义静态成员
在类外定义静态成员时,不能重复static关键字
void Account::rate(double newRate)
{
interestRate=newRate;
}
#静态数据成员不属于类的任一个对象,所以它们不是在创建类的对象时被定义的,这意味着它们不是由类的构造函数初始化的。
#一般来说,不能在类内初始化静态成员,而应在类的外部定义和初始化每个静态成员。
#静态数据成员被定义后,会一直存在于程序的整个生命周期。
//类外定义和初始化1个静态成员
//注意,从类名开始,这条语句的剩余部分就位于类的作用域之内了,可以直接使用 initRate()
double Account::interestRate = initRate();
- 静态成员的使用
1. 使用作用域运算符访问
double r;
r=Account::rate();
2. 使用类的对象、引用或指针访问(虽然静态成员不属于类的某个对象)
Account ac1;
Account *ac2;
r = ac1.rate();
r=ac2->rate();
3.成员函数直接访问
class Account{
public:
void calculate(){amount+=amount*interestRate;}
private:
static double interestRate;
};
参考资料:《C++ Primer》