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