新的需求:
統計在程式執行期間某個類的物件數目
保證程式的安全性(不能使用全域性變數)
隨時可以獲取當前物件的數目
成員變數的回顧:
通過物件名能夠訪問 public 成員變數
每個物件的成員變數都是專屬的
成員變數不能在物件之間共享
靜態成員變數:
在c++中可以定義靜態成員變數
靜態成員變數屬於整個類所有
靜態成員變數的生命期不依賴於任何物件
可以通過類名直接訪問公有靜態成員變數
所有物件共享類的靜態成員變數
可以通過物件名訪問公有靜態成員變數
靜態成員變數的特性:
在定義時直接通過 static 關鍵字修飾
靜態成員變數需要在類外單獨分配空間
靜態成員變數在程式內部位於全域性資料區
語法規則 :
type classname::varname = value;
#include
class
test
~test()
intgetcount()
};int test::ccount =0;
test gtest;
intmain()
編譯結果:
count =
3count =
3count =
3count =
4count =
3
類的靜態成員函式:
1.靜態成員函式是類中的特殊的成員函式
2.靜態成員函式隸屬於整個類所有
3.可以通過類名直接訪問公有的靜態成員函式
4.可以通過物件名訪問公有的靜態成員函式
#include
using
namespace std;
class
demo
;int demo::
geti()
void demo::
staticfunc
(const
char
* s)
void demo::
staticseti
(demo& d,
int v)
/* 不能直接改寫成,不能訪問普通成員變數
靜態成員函式不可以直接訪問普通的成員變數,但可以通過類名或者物件名來訪問
void demo::staticseti(int v)
*/int
main()
編譯結果:
最終解決方案:
#include
using
namespace std;
class
test
~test()
static
intgetcount()
};int test::ccount =0;
intmain()
編譯結果:
count =
0count =
2count =
2count =
3count =
2
小結:
靜態成員函式是類中特殊的成員函式
靜態成員函式沒有隱藏的 this 引數
靜態成員函式可以通過類名直接訪問
靜態成員函式只能訪問靜態成員變數(函式)
靜態類和靜態類成員(C )
靜態類與非靜態類基本相同,但存在乙個區別 靜態類不能例項化。也就是說,不能使用 new 關鍵字建立靜態類型別的變數。因為沒有例項變數,所以要使用類名本身訪問靜態類的成員。例如,如果名為 utilityclass 的靜態類有乙個名為 methoda 的公共方法,則按下面的示例所示呼叫該方法 c uti...
C 靜態類成員和靜態類成員函式
一 靜態類成員 include class stringbad 靜態類成員有乙個特點 無論建立多少物件,程式都只能建立乙個靜態變數副本。也就是說所有物件共享同乙個靜態成員,就像你家 可供全家家庭成員共享一樣。假設建立了10個stringbad物件,將有10個str成員和len成員,但是只共享乙個nu...
C 基礎 靜態成員和靜態類
靜態成員 1.靜態成員是被static關鍵字修飾的.是屬於類的.通過類名.靜態成員來訪問.2.例項成員 沒有被static關鍵字修飾的 是屬於物件的.通過物件名.例項成員來訪問.3.例項成員屬於物件.4.在這個類第一次被載入的時候,這個類下面的所有的靜態成員會被載入 5.靜態成員只被建立1次.所以靜...