1. 程式人生 > >C++ primer 讀書筆記 第七章 06 類的靜態成員

C++ primer 讀書筆記 第七章 06 類的靜態成員

在成員的宣告之前加上static關鍵字即可宣告靜態成員

靜態成員的訪問

  • 使用作用域運算子直接訪問
  • 通過類的物件訪問
Account::rate();  

Account ac1;  
Account *ac2 = &ac1;  

r = ac1.rate();  
r = ac2->rate();

定義靜態成員

static關鍵字只出現在類內部的宣告語句,在類的外部定義靜態成員時,不能重複static關鍵字

在類的外部初始化靜態成員

double Account::interestRate = initRate();

靜態成員一旦被定義,就將一直存在於程式的整個生命週期中

類內初始化

通常情況下,類的靜態成員不應該在類的內部初始化

如果靜態成員是字面值型別的constexpr,則可以在類的內部為其提供const整數型別的類內初始值

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

即使一個常量靜態資料成員在類內部被初始化了,通常情況下也應該在類的外部定義一下該成員。

與非靜態成員的區別

  • 可以是不完全型別
  • 可以作為預設實參

我們知道在類內不能定義該類型別的成員,如

class Bar  
{  
    Bar mem;  
};

這是錯誤的,類成員必須是完全型別

但是靜態成員無此限制

class Bar  
{  
    static Bar mem1;  
    Bar *mem2;  
};

作為預設實參

class Screen  
{  
public:  
    Screen& clear(char = bkground);  
private:  
    static const char bkground;  
};