《計(jì)算機(jī)工程與科學(xué)》是由國防科技大學(xué)計(jì)算機(jī)學(xué)院主辦、國防科技大學(xué)主管的中國計(jì)算機(jī)學(xué)會(huì)會(huì)刊,是國內(nèi)外公開發(fā)行的計(jì)算機(jī)類綜合性學(xué)術(shù)刊物,刊登文章涉及計(jì)算機(jī)科學(xué)理論、計(jì)算機(jī)組織與系統(tǒng)結(jié)構(gòu)、計(jì)算機(jī)軟件、計(jì)算機(jī)應(yīng)用、計(jì)算機(jī)器件設(shè)備與工藝等學(xué)科領(lǐng)域。
[摘要]C++類中的靜態(tài)成員是類中各個(gè)對(duì)象所共享的成員,從數(shù)據(jù)共享的角度出發(fā),介紹靜態(tài)成員在類中實(shí)現(xiàn)數(shù)據(jù)共享的方法、作用。
[關(guān)鍵詞]C++靜態(tài)成員,共享
C++中類的成員分為靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)。它的作用類似于全局變量,可以實(shí)現(xiàn)C++多個(gè)對(duì)象之間的數(shù)據(jù)共享,但全局變量在程序中的可操作性難于控制,經(jīng)常會(huì)帶來不安全性,所以,考慮到程序的安全性,作者在本文講述了靜態(tài)成員在C++程序中的使用方法及作用。
一、靜態(tài)數(shù)據(jù)成員的應(yīng)用
C++中的靜態(tài)數(shù)據(jù)成員是同一個(gè)類中所有對(duì)象所共享的成員,靜態(tài)數(shù)據(jù)成員中存放的是所有對(duì)象的值,不是某一個(gè)對(duì)象的值,所以同一類中的每個(gè)對(duì)象的值都是一樣,但它的值也是可以改變的。通過下面的實(shí)例可以對(duì)以上的內(nèi)容加以證實(shí)、說明靜態(tài)數(shù)據(jù)成員在C++類中的使用方法及作用。
。ㄒ唬╈o態(tài)數(shù)據(jù)成員的定義、初始化
靜態(tài)數(shù)據(jù)成員定義是以static關(guān)鍵字開始,后跟靜態(tài)數(shù)據(jù)成員類型符、變量名;例:staticints;
(二)靜態(tài)數(shù)據(jù)成員的初始化
靜態(tài)數(shù)據(jù)成員的初始化是在類體外進(jìn)行,初始化時(shí)不用加訪問權(quán)限符,但是靜態(tài)成數(shù)據(jù)成員是類的成員,所以在初始化時(shí)應(yīng)指明該成員的類名;例如在類名為Tstu的類中定義了一名為s整型靜態(tài)數(shù)據(jù)成員,則初始化格式為:intTstu::s=0;
。ㄈ╈o態(tài)數(shù)據(jù)成員的引用實(shí)例
#include
classTstu//類的說明;
{public://定義二個(gè)成員函數(shù);
Tstu(inta,intb);//定義構(gòu)造函數(shù),用來對(duì)數(shù)據(jù)成員賦初值;
bb();
private:
intx,y;//定義二個(gè)數(shù)據(jù)成員;
staticints;};//定義一個(gè)靜態(tài)的數(shù)據(jù)成員,類Tstu定義結(jié)束;
intTstu::s=0;//靜態(tài)數(shù)據(jù)成員的賦值;
Tstu::Tstu(inta,intb)//構(gòu)造函數(shù)的實(shí)現(xiàn)部分;
{x=a;y=b;}
voidTstu::bb()//成員函數(shù)的實(shí)現(xiàn)部分;
{s=s+x+y;cout<<”s=”
{Tstut1(10,20),t2(5,3);
t1.bb();t2.bb();}
對(duì)于以上的程序,類Tstu中的t1對(duì)象調(diào)用成員函數(shù)bb()之后,靜態(tài)數(shù)據(jù)成員s中的值是30,那么對(duì)象t2在調(diào)用前,對(duì)于對(duì)象t2,s中的值已是30,因?yàn)閟中的值是每個(gè)對(duì)象所共享的,t2對(duì)象調(diào)用后,s中最后的值是38。
我們?cè)賮砜匆韵麓a:
#include
classTa{
public:
Ta(){n++;}//定義構(gòu)造函數(shù),當(dāng)定義對(duì)象時(shí)n的值自動(dòng)加1;
~Ta(){n--;}//定義析構(gòu)函數(shù),釋放對(duì)象時(shí)n的值自動(dòng)減1;
intsum(){returnn;}//成員函數(shù)sum()用來返回靜態(tài)數(shù)據(jù)成員n的值;
private:
staticintn;};
intTa::n=0;
當(dāng)創(chuàng)建該類對(duì)象實(shí)體時(shí),由于n為所有對(duì)象所共享的數(shù)據(jù),從而可以統(tǒng)計(jì)當(dāng)前創(chuàng)建的所有對(duì)象的數(shù)量。這一技巧可以運(yùn)用到很多方面,如對(duì)象實(shí)體的互斥關(guān)系,引用計(jì)數(shù)等相關(guān)方面。C++類中的靜態(tài)成員有一個(gè)非常好的功能,那就是無論類定義了多少個(gè)對(duì)象,這些對(duì)象始終都共同使用這一個(gè)靜態(tài)成員,在使用時(shí)需要注意的是類靜態(tài)數(shù)據(jù)成員除了在類中形式說明之外,必須在使用前在對(duì)象說明之外作定義性說明,主要是為了給類中靜態(tài)數(shù)據(jù)成員分配內(nèi)存。通過這個(gè)實(shí)例可更加清晰的解述靜態(tài)數(shù)據(jù)成員在類中實(shí)現(xiàn)數(shù)據(jù)的方法、作用。
二、靜態(tài)成員函數(shù)的應(yīng)用
靜態(tài)成員函數(shù)與靜態(tài)成員的特性相似,屬于類的成員,不是對(duì)象的成員。在靜態(tài)成員函數(shù)的實(shí)現(xiàn)中,可以直接引中類中說明的靜態(tài)成員。下面通過具體的實(shí)例說明靜態(tài)成員函數(shù)的應(yīng)用。
我們可以通過以下的代碼來看看靜態(tài)成員函數(shù)的應(yīng)用:
#include
classT
{public:
T(inta){x=a;y=y+a;}
Staticvoidf1(Tt);//定義靜態(tài)成員函數(shù);
Private:
intx;
staticinty;};
voidT::f1(Tt)
{cout<<”x=”
voidmain()
{Tm1(2),m2(4);
T::f1(m1);T::f1(m2);}
以上程序的執(zhí)行結(jié)果分別是x=2,y=6和x=4,y=6;在T類中,定義了靜態(tài)成員函數(shù)f1(),在該函數(shù)的實(shí)現(xiàn)中,可以直接引有類的靜態(tài)數(shù)據(jù)成員,但引用非靜態(tài)成員是通過對(duì)象進(jìn)行的,對(duì)于類靜態(tài)函數(shù)成員而言,則該函數(shù)只能涉及其它類靜態(tài)成員時(shí),否則該函數(shù)不具有任何確切含義,因?yàn)椴煌瑢?duì)象非靜態(tài)成員取值可能不同。
三、總結(jié)
本文是筆者根據(jù)自己多年教學(xué)體會(huì)及經(jīng)驗(yàn),用簡單的例子和簡練的敘述講解C++中靜態(tài)成員在實(shí)現(xiàn)數(shù)據(jù)共享中的應(yīng)用,作用。文中如有不足之處,望各位讀者批評(píng)指正。
參考文獻(xiàn):
[1]張素琴.C++程序設(shè)計(jì)語言[M].北京:清華大學(xué)出版社.1995.
[2]呂軍,楊琦等.VisualC++與面向?qū)ο蟪绦蛟O(shè)計(jì)教程[M].北京:高等教育出版社.2006.
轉(zhuǎn)載請(qǐng)注明來自:http://www.jinnzone.com/jisuanjiyingyonglw/25946.html