第25課 類的靜態成員變數

2022-02-21 12:23:18 字數 2058 閱讀 9185

(1)通過物件名能夠訪問public成員變數

(2)每個物件的成員變數都是專屬的,成員變數不能在物件之間共享

這麼看,如果多個物件想操作同乙個資料,從目前來看只能使用全域性變數(每個物件都可以操作全域性作用域的全域性變數),但是這樣存在安全隱患,在現代軟體開發中不推薦這種方式。

那麼,有沒有其它更好的方式呢?下面我們就引入了類的靜態成員變數的概念。

(1)統計在程式執行期間某個類的物件數目

(2)保證程式的安全性==>  不能使用全域性變數。由於全域性變數在程式的任何地方都可能修改,因此現代的軟體開發中不推薦使用全域性變數。

(3)隨時可以獲取當前物件的數目

1

//由於物件的成員變數都是專屬的,成員變數不能在物件之間共享2//

因此下面這種嘗試無法統計某個類的物件數目3//

在程式開發中不可能一次就成功,需要進行多次的嘗試和優化

45 #include 6

7class

test

816 ~test()

1720

intgetcount()

2124

};25

2627

test gtest;

2829

intmain()

30

解決方案的嘗試

3.1 在c++中可以定義靜態成員變數

(1)靜態成員變數隸屬於整個類所有

(2)靜態成員變數的生命週期不依賴於任何物件,靜態成員變數的生命期如同全域性變數一樣,是程式的執行週期  【靜態成員變數的生命週期和全域性變數的生命週期相同】

(3)可以通過類名直接訪問公有靜態成員變數【類名::靜態成員變數名(class_name::static_member)】

(4)所有物件共享類的靜態成員變數

(5)可以通過物件名訪問公有靜態成員變數

3.2 靜態成員變數的特性

(1)在定義時直接通過static關鍵字修飾

(2)靜態成員變數不占用物件的空間,需要在類外單獨分配空間     【使用 sizeof() 列印類的大小,可以驗證這一點(空類也占用乙個位元組)】

(3)靜態成員變數在程式內部位於全域性資料區【全域性變數、static修飾的區域性變數、類的靜態成員變數這三者都在全域性資料區】

3.3 語法規則

typeclassname::varname=value;  // 這裡前面不用加 static

1 #include 2

3class

test

412 ~test()

1316

intgetcount()

1720

};21

2223

int test::ccount = 0;24

25test gtest;

2627

intmain()

28

靜態成員變數的使用

(1)類中可以通過static關鍵字定義靜態成員變數

(2)靜態成員變數隸屬於類所有,不屬於某個物件

(3)每乙個物件都可以訪問靜態成員變數

(4)靜態成員變數在全域性資料區分配空間

(5)靜態成員變數的生命期為程式執行期

第25課 類的靜態成員變數

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

25 類的靜態成員變數

目錄 1.成員變數的回顧 2.新需求 程式設計實驗 解決方案嘗試 測試一 普通成員變數 測試二 全域性變數 3.靜態成員變數 3.1在c 中可以定義靜態成員變數 3.2靜態成員變數的特性 程式設計實驗 靜態成員變數的使用 4.小結 include class test test int getcou...

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

本文學習自 狄泰軟體學院 唐佐林老師的 c 課程 總結說明 靜態成員變數的意義 為什麼要有靜態成員變數 是因為 成員變數都是每個物件專屬的,但是所有類共享乙個變數的話,就要用靜態成員變數 靜態成員函式的意義 靜態成員函式的意義是 如果沒有物件存在的時候,也可以訪問靜態成員變數。靜態成員函式也是公有的...