第5章 靜態(tài)成員與友員.ppt

第5章 靜態(tài)成員與友員.ppt

ID:60767697

大小:805.00 KB

頁數(shù):135頁

時間:2020-02-02

第5章   靜態(tài)成員與友員.ppt_第1頁
第5章   靜態(tài)成員與友員.ppt_第2頁
第5章   靜態(tài)成員與友員.ppt_第3頁
第5章   靜態(tài)成員與友員.ppt_第4頁
第5章   靜態(tài)成員與友員.ppt_第5頁
資源描述:

《第5章 靜態(tài)成員與友員.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、第5章靜態(tài)成員與友員5.1靜態(tài)成員的需要性5.2靜態(tài)數(shù)據(jù)成員5.3靜態(tài)函數(shù)成員5.4靜態(tài)成員的使用5.5友元的使用5.6編程實例5.1靜態(tài)成員的需要性類是類型而不是數(shù)據(jù)對象,每個類的對象都是該類數(shù)據(jù)成員的拷貝。然而,往往需要讓類的所有對象在類的范圍內(nèi)共享某個數(shù)據(jù),這些數(shù)據(jù)是類中所有對象共有的。聲明為static類的成員便能在類的范圍內(nèi)共享,稱為靜態(tài)成員。例如,建立一個學(xué)生鏈表,在Student類中,聲明鏈表的首指針和學(xué)生人數(shù)。classStudent{//...protected:Student*p

2、First;//鏈表首指針intcount;//學(xué)生人數(shù)};這個類聲明意味著每個學(xué)生對象都有一個鏈表首指針和學(xué)生數(shù),要想得到現(xiàn)有的學(xué)生數(shù),不能到類中去取,因為類不是一個占有內(nèi)存的實體。而到對象中去取,則要求一旦學(xué)生人數(shù)變化,就要對每個對象進行修改。如果將學(xué)生數(shù)的定義count放在全局變量中,則它們在類的外面,不符合面向?qū)ο笠蟮姆庋b性和重用性。例如,下面的代碼用全局變量來表示學(xué)生類鏈表首指針和學(xué)生人數(shù)。classStudent{//...};intcount;//記錄學(xué)生人數(shù),是全局變量Studen

3、t*pFirst;//學(xué)生類鏈表首指針,是全局變量voidfn(){Studentstud1;//創(chuàng)建第一個學(xué)生對象count++;//學(xué)生人數(shù)加1pFirst=&stud1;//對pFirst沒有約束}//fn()退出時,stud1作用域終止,stud1被析構(gòu)由于count和pFirst均為全局變量,在龐大的程序中,沒有真正指明哪個函數(shù)對它們負責,這種無規(guī)則會引起軟件設(shè)計的混亂,一旦程序變大,維護量就急劇上升。同時,在重用Student類的時候,總是還要額外地考慮全局變量的處置,這不得不使類的封裝

4、性受到傷害。若能將學(xué)生人數(shù)和鏈表首指針封裝在類里面,則count和pFrirst可以受到保護,還可以作為一個類而重用,這種屬于類的一部分,但既不適于用普通成員表示,也不適于用全局變量表示的數(shù)據(jù),用靜態(tài)成員來表示。5.2靜態(tài)數(shù)據(jù)成員在一個類中,若將一個數(shù)據(jù)成員說明為static,這個成員就成為靜態(tài)數(shù)據(jù)成員。靜態(tài)數(shù)據(jù)成員是類的所有對象共享的成員因此,靜態(tài)數(shù)據(jù)成員被看做是類的成員而不是某個對象的成員。靜態(tài)數(shù)據(jù)成員有以下特點:(1)使用靜態(tài)數(shù)據(jù)成員可以節(jié)省內(nèi)存。因為無論建立多少個類的對象,都只有一個靜態(tài)數(shù)據(jù)

5、成員的拷貝,即對多個對象來說,靜態(tài)數(shù)據(jù)成員只有一個,供所有對象共用。(2)靜態(tài)數(shù)據(jù)成員是靜態(tài)存儲的,必須對它進行初始化。靜態(tài)數(shù)據(jù)成員的初始化與一般數(shù)據(jù)成員的初始化不同,其格式如下:數(shù)據(jù)類型類名::靜態(tài)數(shù)據(jù)成員名=值;靜態(tài)數(shù)據(jù)成員采用如下方式聲明、分配內(nèi)存空間和初始化:classclassName{public:protected:staticintabc;//聲明靜態(tài)數(shù)據(jù)成員,未分配空間};intclassName::abc=0;//靜態(tài)數(shù)據(jù)成員在類聲明外分配空間和初始化注意:l初始化是在類體外進行

6、的,在類中不為它分配內(nèi)存空間;l初始化時不加該成員的訪問權(quán)限控制符private、protected、public;l初始化時必須使用作用域運算符(::)來表明它所屬的類。公共靜態(tài)數(shù)據(jù)成員可被類的外部訪問(即訪問控制權(quán)限設(shè)為public),保護或私有靜態(tài)數(shù)據(jù)成員只可被類的內(nèi)部訪問,上面的代碼描述了一個保護靜態(tài)數(shù)據(jù)成員。訪問靜態(tài)數(shù)據(jù)成員時,采用如下格式:類名::靜態(tài)數(shù)據(jù)成員名靜態(tài)數(shù)據(jù)成員用得比較多的場合一般為:l用來保存流動變化的對象個數(shù)(如:記錄學(xué)生類鏈表中學(xué)生對象的個數(shù));l作為一個標志,指示一個

7、特定的動作是否發(fā)生(如:可能創(chuàng)建幾個對象,每個對象要對某個磁盤文件進行寫操作,但顯然在同一時間里只允許一個對象寫文件,在這種情況下,用戶希望說明一個靜態(tài)數(shù)據(jù)成員指出文件何時正在使用,何時處于空閑狀態(tài));l一個指向一個鏈表第一成員或最后一個成員的指針(如:鏈表首指針pFirst)。例5.1對象計數(shù)模式。#includeclassPoint{doublex,y;staticintcount;public:Point(doublea=0,doubleb=0){x=a;y=b;cou

8、nt++;}//構(gòu)造函數(shù)Point(Point&p);//拷貝初始化構(gòu)造函數(shù)~Point(){};doubleGetX(){returnx};doubleGetY(){returny};voidShowCount()//輸出靜態(tài)數(shù)據(jù)成員{cout<<"PointObjectid="<

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。