C 第26課 類的靜態成員函式

2021-10-02 10:25:07 字數 2239 閱讀 2139

本文學習自 狄泰軟體學院 唐佐林老師的 c++課程

總結說明:

靜態成員變數的意義:

為什麼要有靜態成員變數 是因為 成員變數都是每個物件專屬的,但是所有類共享乙個變數的話,就要用靜態成員變數

靜態成員函式的意義:

靜態成員函式的意義是 如果沒有物件存在的時候,也可以訪問靜態成員變數。靜態成員函式也是公有的

關於靜態成員函式不能訪問普通成員函式和成員變數的疑問:

答案:普通成員函式內部隱藏著 this 指標,用於指代當前物件,用於讓物件通過普通成員函式訪問自己的成員變數(屬性),而靜態成員函式的初衷就只是為了在沒有物件存在的時候,也可以訪問靜態成員變數,內部沒有 this 指標,可以直接通過類名訪問靜態成員變數,靜態成員函式第一服務物件是類,而不是物件。之所以 靜態成員函式不能訪問普通成員函式和成員變數 ,是因為普通成員函式內部有this 指標來區分是哪個物件,從而判斷選擇訪問哪個物件的成員變數。

如果用靜態成員函式訪問普通成員函式,那麼普通成員函式將沒有辦法區分該去訪問哪個物件的成員變數。

通過需求:《隨時可以獲取當前物件的數目》來引出 類的靜態成員函式;

方案1: 當前物件數目為私有的靜態唯讀變數,可以通過成員函式獲取,但是必須要定義新的物件才能獲取到,捨棄。

方案2:將當前物件數目設定為public 的靜態成員變數,通過類名訪問,但是非常不安全,可以隨意修改,捨棄。

方案3:將當前物件數目設定為private 的靜態成員變數,通過公有靜態成員函式訪問 private靜態成員變數,再通過類名訪問公有靜態成員函式(或物件名,普通成員函式無法直接通過類名直接訪問靜態成員變數)。可行。

實驗1:靜態成員函式使用:公有靜態成員函式可以通過類名和物件名直接訪問

通過物件名直接訪問 公有靜態成員函式

通過類名直接訪問 公有靜態成員函式

實驗2:通過公有靜態成員函式 隨時可以獲取當前物件的數目

通過類名訪問公有靜態成員函式

通過物件名訪問共有靜態成員函式

通過指標訪問共有靜態成員函式

實驗1:靜態成員函式使用:公有靜態成員函式可以通過類名和物件名直接訪問

通過物件名直接訪問 公有靜態成員函式

通過類名直接訪問 公有靜態成員函式

實驗2:通過靜態成員函式 隨時可以獲取當前物件的數目

通過類名訪問公有靜態成員函式

通過物件名訪問共有靜態成員函式

通過指標訪問共有靜態成員函式

#include class test

~test()

//公有靜態成員函式

static int getcount()

};int test::ccount = 0;

int main()

第26課 靜態成員函式

未完成的需求 統計在程式執行期間某個類的物件數目 保證程式的安全性 不能使用全域性變數 隨時可以獲取當前物件的數目 failure 假設程式中沒有test物件,你就無法獲取當前物件的數目。因為在上乙個程式中是使用物件去呼叫成員函式的,此時如果沒有物件,如何去呼叫呢?解決方案1 include cla...

26 類的靜態成員函式

注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 9.2.0 一 未完成的需求 1 統計在程式執行期間某個類的物件數目 2 保證程式的安全性 不能使用全域性變數 3 隨時可以獲取當前物件的數目 failure 程式設計實驗 解決方案的嘗試...

第25課 類的靜態成員變數

本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 在 c 中可以定義 靜態成員變數 靜態成員變數 屬於整個類所有 靜態成員變數的生命期不依賴於任何物件 可以 通過類名直接訪問 公有靜態成員變數 所有物件共享類的靜態成員變數 可以 通過物件名訪問 公有靜態成員變數 靜態成員變數的特性...