在成員函數的實現中不能直接引用類中說明的非靜態成員,可以引用類中說明的靜態成員,如果C++靜態成員函數中要引用非靜態成員時,可通過對象來引用。下面通過例子來說明這一點。
- #include
- class M
- {
- public:
- M(int a) { A=a; B+=a;}
- static void f1(M m);
- private:
- int A;
- static int B;
- };
- void M::f1(M m)
- {
- cout<<"A="<<
- cout<<"B="<<
- }
- int M::B=0;
- void main()
- {
- M P(5),Q(10);
- M::f1(P); file://調用時不用對象名
- M::f1(Q);
- }
讀者可以自行分析其結果。從中可看出,調用靜態成員函數使用如下格式:
- <類名>::<靜態成員函數名>(<參數表>);
一個類的靜態成員函數不能像非靜態成員函數那樣“默認調用”它的非靜態成員函數(因為靜態成員函數沒有隱含的this參數)。在一個類的靜態成員函數中,只要通過某種方式得到了一個指向本類型的對象的指針。
並且有合適的access level, 就可以對此對象調用其非C++靜態成員函數。
1.用來保存對象的個數。
靜態成員函數的作用基本上相當於一個帶有命名空間的全局函數。
1、你不需要生成一個對象的實例就可以直接使用該函數。如,Cxxx::MyStaticFunc();
2、窗口回調函數需使用靜態成員函數或全局函數。
3、線程調用需使用C++靜態成員函數或全局函數。
使用靜態數據成員可以節省內存,因為它是所有對象所公有的,因此,對多個對象來說,靜態數據成員只存儲一處,供所有對象共用。靜態數據成員的值對每個對象都是一樣,但它的值是可以更新的。只要對靜態數據成員的值更新一次,保證所有對象存取更新後的相同的值,這樣可以提高時間效率。