訪(fǎng)問(wèn)控制與封裝

我們已經(jīng)為類(lèi)定義了接口,但是并沒(méi)有任何機(jī)制強(qiáng)制用戶(hù)使用這些接口脾拆。

類(lèi)還沒(méi)有封裝夜惭,也就是說(shuō)用戶(hù)可以直達(dá) sales_data 對(duì)象的內(nèi)部并且控制它的具體實(shí)現(xiàn)細(xì)節(jié)。

在 C++ 中啸胧,使用訪(fǎng)問(wèn)說(shuō)明符加強(qiáng)類(lèi)的封裝性赶站。

定義在 public 說(shuō)明符之后的成員在整個(gè)程序內(nèi)可被訪(fǎng)問(wèn),public 成員定義類(lèi)的接口纺念。

定義在 private 說(shuō)明符之后的成員可以被類(lèi)的成員函數(shù)訪(fǎng)問(wèn)贝椿,但是不能被使用該類(lèi)的代碼訪(fǎng)問(wèn),private 部分封裝了類(lèi)的實(shí)現(xiàn)細(xì)節(jié)陷谱。

定義 sales_data 類(lèi)

作為接口的一部分烙博,構(gòu)造函數(shù)和部分成員函數(shù)緊跟在 public 說(shuō)明符后,數(shù)據(jù)成員和作為實(shí)現(xiàn)部分的函數(shù)則跟在 private 說(shuō)明符后烟逊。

一個(gè)類(lèi)可以包含 0 或 多個(gè) 訪(fǎng)問(wèn)說(shuō)明符渣窜,而且對(duì)于某個(gè)訪(fǎng)問(wèn)說(shuō)明符能出現(xiàn)多少次也沒(méi)有嚴(yán)格限定。

每個(gè)訪(fǎng)問(wèn)說(shuō)明符指定了接下來(lái)的成員的訪(fǎng)問(wèn)級(jí)別宪躯,其有效范圍直到出現(xiàn)下一個(gè)訪(fǎng)問(wèn)說(shuō)明符或到達(dá)類(lèi)的結(jié)尾乔宿。

上述定義中,使用的是 class 而非 struct 開(kāi)始類(lèi)的定義访雪。僅僅是形式上有所不同详瑞,實(shí)際上我們可以使用這兩個(gè)關(guān)鍵字中的任何一個(gè)定義類(lèi)。區(qū)別僅是 struct 和 class 的默認(rèn)訪(fǎng)問(wèn)權(quán)限不太一樣臣缀。

類(lèi)可以在它的第一個(gè)訪(fǎng)問(wèn)說(shuō)明符之前定義成員坝橡,對(duì)這種成員的訪(fǎng)問(wèn)權(quán)限依賴(lài)于類(lèi)定義的方式。若使用 struct 則定義在第一個(gè)訪(fǎng)問(wèn)說(shuō)明符之前的成員是 public 精置;若使用 class 則這些成員是 privat 计寇。

既然 sales_data 的數(shù)據(jù)成員是 private 的,我們的 read、print番宁、add 函數(shù)也就無(wú)法正常編譯了蹲堂,這是因?yàn)楸M管這幾個(gè)函數(shù)是類(lèi)的接口的一部分,但不是類(lèi)的成員贝淤。

類(lèi)可以允許其它類(lèi)或者函數(shù)訪(fǎng)問(wèn)它的非公有成員柒竞,方法是令其它類(lèi)或者函數(shù)稱(chēng)為它的友元。

如果類(lèi)想把一個(gè)函數(shù)作為它的友元播聪,只要增加一條以 friend 關(guān)鍵字開(kāi)始的函數(shù)聲明語(yǔ)句即可朽基。

友元聲明只能出現(xiàn)在類(lèi)定義的內(nèi)部,但是類(lèi)內(nèi)出現(xiàn)的具體位置不限离陶。

友元不是類(lèi)的成員也不受它所在區(qū)域訪(fǎng)問(wèn)控制級(jí)別的約束稼虎。

封裝有兩個(gè)重要的有點(diǎn):

確保用戶(hù)代碼不會(huì)無(wú)意間破壞封裝對(duì)象的狀態(tài)。

被封裝的類(lèi)的具體實(shí)現(xiàn)細(xì)節(jié)可以隨時(shí)改變招刨,而無(wú)須調(diào)整用戶(hù)級(jí)別的代碼霎俩。

友元的聲明僅僅制定了訪(fǎng)問(wèn)權(quán)限,而非一個(gè)通常意義上的函數(shù)聲明沉眶。若希望類(lèi)的用戶(hù)能夠調(diào)用某個(gè)友元函數(shù)打却,那么我們就必須在友元聲明之外再專(zhuān)門(mén)對(duì)函數(shù)進(jìn)行一次聲明。

為了使友元對(duì)類(lèi)的用戶(hù)可見(jiàn)谎倔,我們通常把友元的聲明與類(lèi)本身放置在同一個(gè)頭文件中(類(lèi)的外部)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末柳击,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子片习,更是在濱河造成了極大的恐慌捌肴,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藕咏,死亡現(xiàn)場(chǎng)離奇詭異状知,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)孽查,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)饥悴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人卦碾,你說(shuō)我怎么就攤上這事铺坞∑鹂恚” “怎么了洲胖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)坯沪。 經(jīng)常有香客問(wèn)我绿映,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任叉弦,我火速辦了婚禮丐一,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淹冰。我一直安慰自己库车,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布樱拴。 她就那樣靜靜地躺著柠衍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晶乔。 梳的紋絲不亂的頭發(fā)上珍坊,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音正罢,去河邊找鬼阵漏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛翻具,可吹牛的內(nèi)容都是我干的履怯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼裆泳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼虑乖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起晾虑,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疹味,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后帜篇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體糙捺,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年笙隙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了洪灯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡竟痰,死狀恐怖签钩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坏快,我是刑警寧澤铅檩,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站莽鸿,受9級(jí)特大地震影響昧旨,放射性物質(zhì)發(fā)生泄漏拾给。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一兔沃、第九天 我趴在偏房一處隱蔽的房頂上張望蒋得。 院中可真熱鬧,春花似錦乒疏、人聲如沸额衙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)入偷。三九已至,卻和暖如春械哟,著一層夾襖步出監(jiān)牢的瞬間疏之,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工暇咆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锋爪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓爸业,卻偏偏與公主長(zhǎng)得像其骄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子扯旷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容