問題:隨時可以獲取當前物件的數目。
#include
class
test
~test()
intgetcount()
};int test::ccount =0;
test gtest;
intmain()
這個辦法獲取物件總是通過getcount()
這個函式來呼叫的。但是暴露了乙個問題,物件數目不能為0,也就是說當物件數目為0系統就會出現問題。有沒有乙個辦法改善呢?我們先設定物件數目為0個,將私有的改為共有的(private->public)
。
#include
class
test
~test()
intgetcount()
};int test::ccount =0;
intmain()
這樣的public
方法使得ccount
便於類的呼叫的了,輸出結果當然為ccount=0;
但是這個是一種賦值的方法,假如使得int test::ccount = 10;
結果count = 10
;事實上,對於列為public方法來說,這是個對資料安全不大可靠的問題,因此類似於成員函式的處理,我們也要使用static
的關鍵字來實現成員函式。
#include
class
demo
;int demo::
geti()
void demo::
staticfunc
(const
char
* s)
void demo::
staticseti
(demo& d,
int v)
intmain()
結果:
staticfunc: main begin...
d.i =
20d.i =
10staticfunc: main end.
..
上面的**關鍵字修飾了兩個靜態成員函式:
static
void
staticfunc
(const
char
* s)
;static
void
staticseti
(demo& d,
int v)
;
類呼叫的靜態成員函式
demo::
staticfunc
("main begin..."
);
物件呼叫的靜態成員函式
d.
staticseti
(d,20
);
上面大致看出,
靜態成員函式是類的特殊成員函式
靜態成員函式是整個類所有的
可以通過類名直接訪問公有的靜態成員函式
物件也可以訪問公有的靜態成員函式
**中;private: int i;
是私有的變數。靜態成員函式:demo::staticseti(demo& d, int v)
是在通過物件呼叫私有的成員函式d.i = v;
上面列出靜態成員函式與成員函式的區別。
直接上靜態成員函式統計物件的**;
#include
class
test
~test()
static
intgetcount()
};int test::ccount =0;
intmain()
結果:
count = 0
count = 2
count = 2
count = 3
count = 2
靜態變數是多個物件共享的。因此建立物件的t1,t2
之後ccount=2
;delete pt;
之後便是釋放整個變數。
總結:
靜態成員函式是類中的特殊的成員函式
靜態成員函式沒有隱藏的this指標
靜態成員函式可以通過類名直接訪問
靜態成員函式可以通過物件訪問
靜態成員函式只能直接訪問靜態成員變數(函式),而不能直接訪問普通成員變數(函式)
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...
C 類靜態成員與類靜態成員函式
當將類的某個資料成員宣告為static時,該靜態資料成員只能被定義一次,而且要被同類的所有物件共享。各個物件都擁有類中每乙個普通資料成員的副本,但靜態資料成員只有乙個例項存在,與定義了多少類物件無關。靜態方法就是與該類相關的,是類的一種行為,而不是與該類的例項物件相關。靜態資料成員的用途之一是統計有...