《C++ Primer》讀書筆記-第七章 06 類的靜態成員
聲明:
- 文中內容收集整理自《C++ Primer 中文版 (第5版)》,版權歸原書所有。
- 原書有更加詳細、精彩的釋義,請大家購買正版書籍進行學習。
- 本文僅作學習交流使用,禁止任何形式的轉載
- 與類本身直接相關,而不是與類的各個對象保持關聯
- 類的對象中不包含任何與靜態數據成員有關的數據
- 靜態成員函數也不能與任何對象綁定在一起,且不包含this指針
- 靜態成員可以是public或private的
在成員的聲明之前加上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]; };
即使一個常量靜態數據成員在類內部被初始化了,通常情況下也應該在類的外部定義一下該成員。
PS: 這個地方書上說的有點難理解,我理解是不是和類的成員的初始化時機有關。
與非靜態成員的區別
- 可以是不完全類型
- 可以作為默認實參
我們知道在類內不能定義該類類型的成員,如
class Bar { Bar mem; };
這是錯誤的,類成員必須是完全類型
但是靜態成員無此限制
class Bar { static Bar mem1; Bar *mem2; };
作為默認實參
class Screen { public: Screen& clear(char = bkground); private: static const char bkground; };
第7章完。
稍作整理後,繼續回過頭讀json11源碼。
本文僅發佈於:
微信公眾號:馬志峰的編程筆記
知乎專欄:馬志峰的編程筆記 - 知乎專欄
推薦閱讀:
※Roman To Integer
※【源碼眾讀】之問題解答,Part_3
※《C++ Primer》讀書筆記-第十二章 02 動態數組
※我的CUDA學習之旅1——大圖像分塊處理程序
TAG:C |
