通過物件名能夠訪問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關鍵字修飾 靜態成員變數需要在類外單...