类的静态成员

**

类的静态成员

**
类的静态成员存在于任何对象之外,对象中不包含任何与静态数据成员有关的数据。

  • 静态成员的声明

    在成员声明之前加上Static使得其与函数关联。
    举个例子:

Class Account
{
private:
    std::string owner;
    double amount;
    static double interestRate;
    static double initRate();
public:
    static double Rate()
    {
        return interestRate;
    }
};

对于Account的每一个对象豆浆包含owner和amount两个数据成员,而对于静态成员interestRate只有一个,且被所有的对象共享。

  • 静态成员的使用
    1.使用作用域运算符直接访问
double r;
r=Account::Rate();

2.使用类的对象、引用、指针来访问

Account ac1;
Account *ac2=&ac1;
r=ca1.Rate()//通过对象或引用
r=ca2.Rate()//通过指向对象的指针

3.成员函数可以直接使用静态成员

class Account
{
private:
    static double interestRate;
public:
    void calculate()
    {
        amount+=amount* interestRate;
    }
};
  • 定义静态成员
    1.静态成员的定义可以在类的内部或者外部。
    2.如果在类的外部定义静态成员,则无需加Static关键字,关键字只在类内声明时出现。
    3.由于静态成员不属于类的任何一个对象,所以它不会被类的构造函数初始化。必须在类的外部定义和初始化静态成员。

定义时需要指定其类型名、类名、作用域运算符及成员自己的名字:

double Account::interestRate=initRate();//定义并初始化
  • 静态成员的类内初始化
    通常静态成员不可以在类内初始化,但是可以为静态成员提供const整数类型的类内初始值,但是要求成员必须是字面值常量类型的constexpr。

例如:用一个初始化了的静态成员表示数组的维度

class Account
{
private:
    static constexpr int period=30;
    double daily_tbl[period];
};

此时,period只用于定义daily_tbl的维度,则不需要在外面专门定义,但是要把Account::period传递给一个接受 const int&的函数时,必须定义。

constexpr int Account::period;//一个不带初始值的静态成员的定义

一个静态成员在类内被初始化了,在类的外部也应该定义一下该成员

  • 静态成员可以应用的场景
    1.静态成员可以是不完全类型
class Bar
{
private:
    Static Bar mem1;//正确
    Bart *men2;//正确,指针成员也可以是不完全类型。
    Bar men3;//错误
};

2.静态成员可以作为默认参数

Class Screen
{
private:
    Static const char bkground;
public:
    Screen& clear (char=bkground);
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值