C++学习笔记之静态成员

  • 静态成员的作用

有时候一些成员不是打算由类的各个对象(类的实例)来各自维护,而是与类本身直接相关联

例:一个银行账户类,可以实例化出很多个对象(很多客户)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》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值