C++ primer 讀書筆記 第七章 06 類的靜態成員
阿新 • • 發佈:2018-12-08
在成員的宣告之前加上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;
};