C++类的静态成员详解
類的靜態成員分為靜態數據成員和靜態成員函數
靜態成員的原理及作用可以參考
c++ static的作用,以及static對象在類和函數中區別_Kikim的地盤-CSDN博客
舉例如下:
靜態數據成員
假如我們要設計一個戰爭游戲,游戲中有許多的兵種。游戲的過程中,每隔一段時間每個兵種都會產生,同時由于戰爭的消耗,每個兵種士兵的數量又會減少。為了情節更逼真吶,我們引入了一個士氣的概念,當士氣比較高的時候,這個兵種的士氣戰斗力就會很強,士氣較低的時候,兵種的戰斗力就會比較弱。兵種的士氣受很多因素影響,其中一個最直接的因素就是士兵的數量相關,它與數量成正比。我們就需要一組全局變量,每個變量都會記錄當前兵種的數量,但是使用全局變量會引入很多的問題,使用全局變量的安全得不到保障,我們可以在程序的任何地方修改它的值。全局變量還可能導致命名空間的污染,當程序比較大的時候,各個模塊之間有可能沖突。那如果不使用全局變量,我們就可以使用靜態的數據成員。
靜態數據成員:以static開頭。靜態數據成員為各個對象共有,不屬于某個具體的對象,所有對象都可以對它進行引用,都可以讀取和修改。若一個對象修改了該靜態成員的值,則在其他各個對象中該數據成員的值都會同時改變。
定義類時就為靜態數據成員分配空間,不隨對象的建立而分配空間。可以說它是屬于這個類的,定義完類之后就可以引用。
1.定義方法
static int count;//定義了一個int類型的靜態數據成員,它的定義是在類里面,但是初始化不可以在類的里面類外面初始化 (你可以在類的實現文件里面初始化):
int CTime::count=0;//初始化不要再加static
2.調用方法
1)類名::靜態成員
2)對象名.靜態成員
在類內的靜態數據成員僅僅是對該成員的聲明,同時還需要在類外部進行定義。
當我們在構造函數里面對它++然后輸出,在析構函數里面—輸出就得到這樣的結果:構造函數調用的次數就是創建對象的個數,析構函數調用的次數就是銷毀對象的次數。
靜態成員函數
在聲明成員函數時在函數前添加static關鍵字就定義了靜態成員函數。
與靜態數據成員一樣,靜態成員函數也是類的一部分。
1.聲明靜態成員函數
static int func(); //定義的時候不需要static關鍵字
2.調用靜態成員函數
1)類名::靜態成員函數
2)對象名.靜態成員函數
靜態成員函數一般是為了處理靜態的數據成員。
與一般成員函數的區別:
1)非靜態成員函數有this指針,靜態成員函數沒有this指針。
2)因為它可以在未定義類對象時就可以引用。因此靜態成員函數不能訪問本類中的非靜態成員(沒有this指針,就不能通過引用調用成員函數和數據成員)。
總結
以上是生活随笔為你收集整理的C++类的静态成员详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: muduo源码注释
- 下一篇: 剑指offer反转链表(C++实现|测试