學(xué)習(xí)C++靜態(tài)成員注意事宜
下面文章著重介紹C++靜態(tài)成員,類(lèi)的靜態(tài)數(shù)據(jù)成員應(yīng)該在代碼中被顯示的初始化,一定要在類(lèi)外進(jìn)行, C++靜態(tài)成員和普通數(shù)據(jù)成員區(qū)別較大,體現(xiàn)在下面幾點(diǎn):
1.靜態(tài)數(shù)據(jù)成員
在類(lèi)中定義C++靜態(tài)成員成員的方法就是在該成員的前面加上關(guān)鍵字static.
定義靜態(tài)數(shù)據(jù)成員的語(yǔ)句格式如下:
- class 類(lèi)名
- {
- ……
- static 類(lèi)型說(shuō)明符 成員名;
- ……
- };
C++靜態(tài)成員是類(lèi)的所有對(duì)象共享的成員。靜態(tài)數(shù)據(jù)成員所占的空間不會(huì)隨著對(duì)象的產(chǎn)生而分配,也不會(huì)隨著對(duì)象的消失而回收。對(duì)靜態(tài)數(shù)據(jù)成員的操作和類(lèi)中一般數(shù)據(jù)成員的操作是不一樣的,定義為私有的靜態(tài)數(shù)據(jù)成員不能被外界所訪問(wèn)。靜態(tài)數(shù)據(jù)成員可由任意訪問(wèn)權(quán)限許可的函數(shù)所訪問(wèn)。
由于靜態(tài)數(shù)據(jù)成員是類(lèi)的所有對(duì)象共享的,而不從屬于任何一個(gè)具體對(duì)象,所以必須對(duì)類(lèi)的靜態(tài)數(shù)據(jù)成員進(jìn)行初始化,但對(duì)它的初始化不能在類(lèi)的構(gòu)造函數(shù)中進(jìn)行,其初始化語(yǔ)句應(yīng)當(dāng)寫(xiě)在程序的全局區(qū)域中,并且必須指明其數(shù)據(jù)類(lèi)型與所屬的類(lèi)名,其初始化格式如下:
類(lèi)型類(lèi)名::變量名=值;對(duì)于在類(lèi)的public部分說(shuō)明的靜態(tài)數(shù)據(jù)成員,在類(lèi)的外部可以不使用成員函數(shù)而直接訪問(wèn),但在使用時(shí)必須用類(lèi)名指明所屬的類(lèi),其訪問(wèn)格式為:對(duì)于在類(lèi)的非public部分說(shuō)明的靜態(tài)數(shù)據(jù)成員,則只能由類(lèi)的成員函數(shù)訪問(wèn),其訪問(wèn)方法與訪問(wèn)類(lèi)中普通數(shù)據(jù)成員的訪問(wèn)方法完全一樣,但在類(lèi)的外部不能訪問(wèn)。
2.靜態(tài)成員函數(shù)
靜態(tài)成員函數(shù)的定義與一般成員函數(shù)的定義相同,只是在其前面冠以static關(guān)鍵字,其定義格式如下:
- class 類(lèi)名
- {
- …
- static 類(lèi)型 函數(shù)名(形參)
- { 函數(shù)體 }
- …
- };
說(shuō)明:
(1)類(lèi)的C++靜態(tài)成員函數(shù)只能訪問(wèn)類(lèi)的靜態(tài)數(shù)據(jù)成員,而不能訪問(wèn)類(lèi)中的普通函數(shù)成員(非靜態(tài)數(shù)據(jù)成員),因?yàn)槠胀〝?shù)據(jù)成員只有類(lèi)的對(duì)象存在時(shí)才有意義。
(2)C++靜態(tài)成員函數(shù)與類(lèi)相聯(lián)系,而不與類(lèi)的對(duì)象相聯(lián)系,所以,在類(lèi)的外部調(diào)用類(lèi)中的公有靜態(tài)成員函數(shù),必須在其左面加上“類(lèi)名::”,而不是通過(guò)對(duì)象名調(diào)用公有靜態(tài)成員函數(shù)。在類(lèi)的外部不能調(diào)用類(lèi)中的私有靜態(tài)成員函數(shù)。
【編輯推薦】





















