標籤:

《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 |