6.7 常成員
雖然數(shù)據(jù)隱藏保證了數(shù)據(jù)的安全性,但各種形式的數(shù)據(jù)共享卻又不同程度地破壞了數(shù)據(jù)的安全性。因此,對(duì)于既需要共享又需要防止改變的數(shù)據(jù)應(yīng)該定義為常量進(jìn)行保護(hù),以保證它在整個(gè)程序運(yùn)行期間是不可改變的。這些常量需要使用const修飾符進(jìn)行定義。const關(guān)鍵字不僅可以修飾類對(duì)象本身,也可以修飾類對(duì)象的成員函數(shù)和數(shù)據(jù)成員,分別稱為常對(duì)象、常成員函數(shù)和常數(shù)據(jù)成員。
1常對(duì)象
使用const關(guān)鍵字修飾的對(duì)象稱為常對(duì)象,它的定義格式如下:
<類名>const<對(duì)象名> 或 const<類名><對(duì)象名>
常對(duì)象在定義時(shí)必須進(jìn)行初始化,而且不能被更新。
2常成員函數(shù)
使用const關(guān)鍵字說(shuō)明的成員函數(shù)稱為常成員函數(shù),常成員函數(shù)的說(shuō)明格式如下:
<返回類型><成員函數(shù)名>(<參數(shù)表>)const;
3常數(shù)據(jù)成員
使用const說(shuō)明的數(shù)據(jù)成員稱為常數(shù)據(jù)成員。常數(shù)據(jù)成員的定義與一般常量的定義方式相同,只是它的定義必須出現(xiàn)在類體中。
常數(shù)據(jù)成員同樣也必須進(jìn)行初始化,并且不能被更新。但常數(shù)據(jù)成員的初始化只能通過(guò)構(gòu)造函數(shù)的成員初始化列表進(jìn)行。
常數(shù)據(jù)成員的初始化只能在成員初始化列表中進(jìn)行,但對(duì)于大多數(shù)數(shù)據(jù)成員而言,既可以使用成員初始化列表的方式,也可以使用賦值,即在構(gòu)造函數(shù)體中使用賦值語(yǔ)句將表達(dá)式的值賦值給數(shù)據(jù)成員。這兩種方式中,成員初始化列表方式使初始化情況更加明顯,并且可能帶來(lái)效率上的優(yōu)勢(shì)。
6.8 友元
類具有數(shù)據(jù)封裝和隱藏的特性,只有類的成員函數(shù)才能訪問(wèn)類的私有成員,外部函數(shù)只能訪問(wèn)類的公有成員。但在某些情況下,需要在類的外部訪問(wèn)類的私有成員。這時(shí),如果通過(guò)公有成員函數(shù)進(jìn)行訪問(wèn),由于參數(shù)傳遞、類型檢查和安全性檢查等需要時(shí)間上的開銷,將影響程序的運(yùn)行效率。為了解決整個(gè)問(wèn)題,引入了友元。友元可以在類外部直接訪問(wèn)類的私有成員,提高了程序的運(yùn)行效率。
友元提供了不同類或?qū)ο蟮某蓡T函數(shù)之間、類的成員函數(shù)與一般函數(shù)之間進(jìn)行數(shù)據(jù)共享的機(jī)制。對(duì)于一個(gè)類,可以利用friend關(guān)鍵字將一般函數(shù)、其他類的成員函數(shù)或者是其他類聲明為該類的友元,使得這個(gè)類中本來(lái)隱藏的信息(包括私有成員和保護(hù)成員)可以被友元所訪問(wèn)。如果友元是一般成員函數(shù)或是類的成員函數(shù),稱為友元函數(shù);如果友元是一個(gè)類,則稱為友元類,友元類的所有成員函數(shù)都成為友元函數(shù)。
1友元函數(shù)
友元函數(shù)不是當(dāng)前類的成員函數(shù),而是獨(dú)立于當(dāng)前類的外部函數(shù)(包括普通函數(shù)和其他類的成員函數(shù)),但它可以訪問(wèn)該類的所有對(duì)象的成員,包括私有成員、保護(hù)成員和公有成員。
友元函數(shù)要在類定義時(shí)聲明,聲明時(shí)要在其函數(shù)名前加上關(guān)鍵字friend。該聲明可以放在公有部分,也可以放在私有部分。友元函數(shù)的定主既可以在類內(nèi)部進(jìn)行,也可以在類外部進(jìn)行。
2友元類
友元除了可以是函數(shù)外,還可以是類,即一個(gè)類可以作為另一個(gè)類的友元,稱為友元類。友元類的所有成員函數(shù)都是另一個(gè)類的友元函數(shù),都可以訪問(wèn)另一個(gè)類中的隱藏信息(包括私有成員和保護(hù)成員)。
友元類可以在另一個(gè)類的公有部分或私有部分進(jìn)行說(shuō)明,說(shuō)明方法如下:
friend<類名>;//友元類類名
編輯推薦:
2014年上半年計(jì)算機(jī)等級(jí)考試報(bào)名時(shí)間預(yù)告
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |