適用場景
- 統計類實例化對象數量
- 共享錯誤處理策略/配置參數
- 銀行利率等全體對象共同屬性
用全局變量破壞封裝;static 類成員屬於類、為全體對象共享、不屬於單個對象。
分類與聲明
class Account {
static double interestRate; // static 數據成員
static void setRate(double); // static 成員函數
// ...
};
// 類外定義(必須)
double Account::interestRate = 0.03;
void Account::setRate(double r) { interestRate = r; }
訪問方式
Account::rate(); // 類名::成員(推薦)
Account a; a.rate(); // 對象.成員
Account* p = &a; p->rate(); // 指針->成員
Account& r = a; r.rate(); // 引用.成員
static 成員函數特性
- 無 this 指針:不能訪問非 static 成員
- 可直接訪問 static 數據成員、其他 static 成員函數
- 可聲明為 const/volatile(但無 this,實際無意義)
優勢總結
| 優勢 | 說明 |
| 作用域封裝 | 名稱在類作用域,避免全局命名衝突 |
| 訪問控制 | 可 private/protected,全局變量不可 |
| 語義清晰 | 閱讀代碼即知屬於哪個類 |
與普通成員對比