c++:類中的static成員


首先靜態成員可以是public的,也可以是private的,只需在一般的變量、函數聲明語句前加上static關鍵字即可聲明一個static變量。

類中的靜態成員存在與任何對象之外,所有該類對象的共享一個static成員。

靜態成員對象不與任何對象綁定在一起,包括this指針。靜態成員函數不能聲明為const的,也不能在static函數體中使用this指針。

可以直接使用作用與運算符訪問靜態成員,同時可以通過類的對象,引用或者指針來訪問static成員,盡管它們有時是private成員。成員函數可以直接使用static成員。

類的靜態成員函數可以在類的內部或外部定義,當在外部定義時,不能重復關鍵字static。但類的靜態成員變量必須在外部定義和初始化,且在任何函數之外,一個靜態數據成員只能定義一次。

class Account {
public:
    Account() = default;
    Account(const std::string &s, double amt):
        owner(s), amount(amt) { }

    void calculate() { amount += amount * interestRate; }
    double balance() { return amount; }
public:
    static double rate() { return interestRate; }
    static void rate(double);   
private:
    std::string owner; 
    double amount = 0.0;
    static double interestRate; 
    static double initRate() { return .0225; }
    static const std::string accountType;
    static constexpr int period = 30;// period is a constant expression
    double daily_tbl[period];
};

const string Account::accountType("Savings Account");
double Account::interestRate = initRate();//在類以及任何函數之外定義static成員,以及類名之后的部分屬於類的作用域之內,因此可以直接使用initRate函數。

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

 

  注意:雖然interestRate在類內部已經聲明,但必須要在類外部定義后,才能使用它!

然而,例外的是,我們可以為靜態成員提供const整數類型的類內初始值,但要求該靜態成員必須是字面值常量constexpr。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM