九 類的靜態成員變數

2021-07-25 18:47:01 字數 1561 閱讀 9363

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

每個物件都可以有只屬於自己的成員變數

成員變數不能在物件之間共享

1、靜態成員變數屬於整個類(注意補水物件而是類)所有,不需要依賴任何物件,不會因為物件的產生或者銷毀而被產生和銷毀,需要在類外單獨分配空間,儲存位置為全域性資料區

2、靜態成員變數的訪問方法:

可以通過類名直接訪問public靜態成員(可以不需要物件名)

也可以通過物件名訪問public靜態成員(通過類名和物件名都可以訪問靜態成員變數)

靜態成員函式可以直接訪問靜態成員變數

#include

class

test

static

void

set(int i)

};int test::m;//一定注意要在外部分配空間,可以初始化也可以不初始化,因為在全域性資料區預設值為0

int main()

注:靜態成員屬於類,並且類裡邊的所有成員及所有類的物件都可以共享裡面的值

從命名空間的角度

類的靜態成員變數只是類這個命名空間中全域性變數和全域性函式

不同之處是,類可以對靜態成員進行許可權的限制,而命名空間不行

從面向的角度

類的靜態成員變數屬於類概念本身

類的所有物件共享相同的靜態成員

#include 

class test

test()

~test()

};int test::ccount;//不賦初值也可以,因為在全域性資料區,不賦初值時預設為0

void run()

int main()

#include

class c1

;struct c2

;class c3

};int main()

結果c1、c2、c3的大小一樣,都是12

原因如下:

原因如下:原因c++類物件的成員變數和成員函式是分開儲存的

成員變數:

普通成員變數儲存於物件中,與struct變數有相同的記憶體布局和位元組對齊方式

靜態成員變數:儲存於全域性資料段

成員函式:

儲存於**段

c++中的class從物件導向理論出發,將變數和函式集中定義在一起,用於描述現實世界中的類

從計算機角度,程式依然由資料段和**段構成

那麼如何進行轉換?

靜態成員函式不包含指向具體物件的指標,而普通成員函式包含乙個指向具體物件的指標,即c++類中的普通成員函式都隱式包含乙個指向當前物件的this指標(注意是物件)

#include 

class test

void print()

};int test::c;

int main()

類的靜態成員變數

通過物件名能夠訪問public成員變數,每個物件的成員變數都是專屬的,成員變數不能再物件之間共享,先來看乙個例子 include class test test intgetcount test gtest intmain 結果 sice sice g a.c sice sice a.out cou...

類的靜態成員變數

新需求 統計在程式執行期間某個類的物件數目 保證程式的安全性 不能使用全域性變數 隨時可以獲取當前物件的數目 incldue class test test intgetcount test gtest intmain 輸出結果為 1 1 1,沒有達到使用者需求!每個成員都擁有乙個變數,不是公共的,...

類的靜態成員變數

在c 中可以定義靜態成員變數 靜態成員變數屬於整個類所有 靜態成員變數的生命週期不依賴於任何物件 可以通過類名直接訪問公有靜態成員變數 所有物件共享類的靜態成員變數 可以通過物件名訪問公有靜態成員變數 靜態成員變數 靜態成員變數的特性 在定義時直接通過static關鍵字修飾 靜態成員變數需要在類外單...