Cpp关键字破解(二)【static】篇

关键字总结-static

文章目录

概念

在一个类中,有时候并不希望所有的成员都能与类的对象相关联,而只希望有些成员能够被类的所有对象共享,此时就需要用到static关键字。静态成员可以是public也可以是private,静态成员包括:静态数据成员、静态成员函数。

定义一个类表示银行账户,其中每个类对象都拥有相同的静态成员:利率。一旦更新静态成员后,该类的所有对象都会使用新的静态成员,这是因为静态成员与类直接绑定

class Account
{
public:
    void calculate()
    {amount += amount*interestRate;}
    
    static double rate()
    {return interestRate;}
    
    static void rate(double);
    
private:
    std::string owner;
    double amount;
    static double interestRate;
    static initRate();
}

因为静态成员直接与类绑定,所以类的对象中不包括任何与静态成员(数据+函数),因此,每个Account对象只包含成员函数calculate()以及数据成员owneramount

static使用场景

只能出现在类内部的声明语句中

静态成员的使用

使用静态成员:(1)域作用符(2)使用类的对象、引用、指针

double r = Account::rate();

Account ac1;
Account *ac2;
//虽然静态成员不属于某个对象,但仍旧可以用某个对象来访问
r = ac1.rate();
r = ac2->rate();

使用静态数据成员:

注意定义Account::calculate()函数时,即在静态成员函数内部,不需要使用域作用符也能访问静态数据成员。

类外初始化静态成员

可以在类外定义静态成员函数,要注意表明返回值类型与作用域

void Account::rate(double newRate)
{
	interestRate = newRate;
}

一般,不能在类内直接初始化静态成员,必须在类的外部定义和初始化每个静态成员,在类的内部只是声明。这是因为静态成员属于整个类,如果在类内初始化,会导致每个对象都包含该静态成员。但也是可以以一种特殊方式(静态常量成员)在类内初始化静态成员的。

//类外初始化一个静态数据成员
double Account::interestRate = initRate();
//注意initRate()是私有方法,但是从域名开始,这条语句的剩余部分就在类的作用域中了
上一篇:程序员之计算养老保险还是定投理财划算


下一篇:音视频基本格式