第10章 靜態(tài)成員與友元

第10章 靜態(tài)成員與友元

ID:42716593

大?。?8.00 KB

頁數(shù):32頁

時間:2019-09-21

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

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

1、第八章多態(tài)性靜態(tài)成員友元友元應(yīng)用實例靜態(tài)成員是指聲明為static的類成員。在類的范圍內(nèi)所有對象共享某個數(shù)據(jù)。友元是一種定義在類外部的普通函數(shù),但它需要在類的內(nèi)部進行說明,為了與該類的成員函數(shù)加以區(qū)別,在說明時前面加上關(guān)鍵字friend。友元不是成員函數(shù),但它可以訪問類中的私有成員。其作用是提高程序的運行效率。C++語言中的友元函數(shù)為在類外訪問類中的私有成員和保護成員提供了方便,但破壞了類的封裝性和隱蔽性。友元可以是一個函數(shù),稱為友元函數(shù),也可以是一個類,稱為友元類。友元函數(shù)和友元類統(tǒng)稱為友元。靜態(tài)成員類相當(dāng)于一個數(shù)據(jù)類型,當(dāng)說明

2、一個某類的對象時,系統(tǒng)就為該對象分配一塊內(nèi)存單元來存放類中的所有成員。但在某些應(yīng)用中,需要程序中屬于某個類的所有對象共享某個數(shù)據(jù)。為此,一個解決的辦法就是將所要共享的數(shù)據(jù)說明為全局變量,但這將破壞數(shù)據(jù)的封裝性;較好的解決辦法是將所要共享的數(shù)據(jù)說明為類的靜態(tài)成員。靜態(tài)數(shù)據(jù)成員C++中,同一個類定義多個對象時,每個對象擁有各自的數(shù)據(jù)成員(不包括靜態(tài)數(shù)據(jù)成員),而所有對象共享一份成員函數(shù)和一份靜態(tài)數(shù)據(jù)成員。靜態(tài)數(shù)據(jù)成員是類的所有對象中共享的成員,而不是某個對象的成員,因此可以實現(xiàn)多個對象間的數(shù)據(jù)共享。靜態(tài)數(shù)據(jù)成員不屬于任何對象,它不因?qū)?/p>

3、象的建立而產(chǎn)生,也不因?qū)ο蟮奈鰳?gòu)而刪除,它是類定義的一部分,所以使用靜態(tài)數(shù)據(jù)成員不會破壞類的隱蔽性。對靜態(tài)數(shù)據(jù)成員的操作和一般數(shù)據(jù)成員一樣,定義為私有的靜態(tài)數(shù)據(jù)成員不能由外界訪問。靜態(tài)數(shù)據(jù)成員可由任意訪問權(quán)限許可的函數(shù)訪問??梢栽陬惖某蓡T函數(shù)中改變靜態(tài)數(shù)據(jù)成員。靜態(tài)數(shù)據(jù)成員不從屬于任何一個具體對象,所以必須對它初始化,且對它的初始化不能在構(gòu)造函數(shù)中進行。類中用關(guān)鍵字static修飾的數(shù)據(jù)成員叫做靜態(tài)數(shù)據(jù)成員。說明一個靜態(tài)數(shù)據(jù)成員的方法與說明一個一般靜態(tài)變量一樣,只不過前者是在一個類中說明。靜態(tài)數(shù)據(jù)成員的使用方法如下:(1)靜態(tài)數(shù)據(jù)

4、成員的定義與一般數(shù)據(jù)成員相似,但前面要加上static關(guān)鍵詞。(2)靜態(tài)數(shù)據(jù)成員的初始化與一般數(shù)據(jù)成員不同,靜態(tài)數(shù)據(jù)成員初始化的格式如下:<類型><類名>::<靜態(tài)數(shù)據(jù)成員>=<值>;(3)在引用靜態(tài)數(shù)據(jù)成員時采用格式:<類名>::<靜態(tài)數(shù)據(jù)成員>這表明:(1)初始化在類體外進行,而前面不加static,以免與一般靜態(tài)變量或?qū)ο笙嗷煜?2)初始化時不加該成員的訪問權(quán)限控制符private,public等。(3)初始化時使用作用域運算符來標(biāo)明它所屬類,因此,靜態(tài)數(shù)據(jù)成員是類的成員,而不是對象的成員。classClass1{inta

5、;staticintb;//…}c1,c2;intClass1::b;類Class1中包含兩個數(shù)據(jù)成員a和b,其中a為一般數(shù)據(jù)成員,在對象c1和c2中都存在有各自的該數(shù)據(jù)成員的副本;而b是靜態(tài)數(shù)據(jù)成員,所有類Class1的對象中的該成員實際上是同一個變量。C++編譯器將靜態(tài)數(shù)據(jù)成員存放在靜態(tài)存儲區(qū),該存儲區(qū)中的所有數(shù)據(jù)為類的所有對象所共享。#include classMyclass{ public:Myclass(inta,intb,intc); voidGetNumber(); voidGetSum();

6、 private:intA,B,C; staticintSum; };intMyclass::Sum=0;Myclass::Myclass(inta,intb,intc) { A=a; B=b; C=c; Sum+=A+B+C; }voidMyclass::GetNumber() {cout<<"Number="<

7、(14,9,11);M.GetNumber();N.GetNumber();M.GetSum();N.GetSum(); }從輸出結(jié)果可以看到Sum的值對M對象和對N對象都是相等的。這是因為在初始化M對象時,將M對象的三個int型數(shù)據(jù)成員的值求和后賦給了Sum,于是Sum保存了該值。在初始化N對象時,對將N對象的三個int型數(shù)據(jù)成員的值求和后又加到Sum已有的值上,于是Sum將保存另后的值。所以,不論是通過對象M還是通過對象N來引用的值都是一樣的,即為54。靜態(tài)成員函數(shù)靜態(tài)成員函數(shù)的定義和其他成員函數(shù)一樣。但在說明時需注意靜態(tài)成員

8、函數(shù)不得說明為虛函數(shù)。靜態(tài)成員函數(shù)與靜態(tài)數(shù)據(jù)成員類似,也是從屬于類,靜態(tài)成員函數(shù)的定義是在一般函數(shù)定義前加上static關(guān)鍵字。調(diào)用靜態(tài)成員函數(shù)的格式如下:<類名>::<靜態(tài)成員函數(shù)名>(<參數(shù)表>);靜態(tài)成員函數(shù)與靜態(tài)數(shù)據(jù)成員一樣,與類相聯(lián)系,不

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

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

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