1. 程式人生 > >訪問控制與封裝

訪問控制與封裝

www ont 現在 bsp 必須 pri 數據 源文件 區別

在C++語言中,我們使用訪問說明符加強類的封裝性:

·定義在public說明符之後的成員在整個程序內可被訪問,public成員定義類的接口。

·定義在private說明符之後的成員可以被類的成員函數訪問,但是不能被使用該類的代碼訪問,private部分封裝(即隱藏了)類的實現細節。

作為接口的一部分,構造函數和部分成員函數緊跟在public說明符之後;而數據成員和作為實現部分的函數則跟在private說明符後面。

一個類可以包含0個或多個訪問說明符,而且對於某個訪問說明符能出現多少次也沒有嚴格限定。每個訪問說明符指定了接下來的成員的訪問級別,其有效範圍直到出現下一個訪問說明符或者到達類的結尾處為止。

class和struct關鍵字的唯一區別是,默認訪問權限不太一樣。類可以在它的第一個訪問說明符之前定義成員,如果使用struct關鍵字,則定義在第一個訪問說明符之前的成員是public的;相反,使用class,這些成員是private的。

友元

對於作為類的接口一部分而不是類的成員的函數,由於private的限制而無法訪問需要訪問的成員。

類可以允許其他類或者函數訪問它的非公有成員,方法是令其他類或者函數成為它的友元。

如果類想把一個函數作為它的友元,只需要增加一條以friend關鍵字開始的函數聲明語句即可。

友元聲明只能出現在類定義的內部,但是在類內出現的具體位置不限。友元不是類的成員也不受它所在區域訪問控制級別的約束。一般來說,最好在類定義開始或結束前的位置集中聲明友元。

友元的聲明僅僅指定了訪問的權限,而非一個通常意義上的函數聲明。如果我們希望類的用戶能夠調用某個友元函數,那麽我們就必須在友元聲明之外再專門對函數進行一次聲明。為了使友元對類的用戶可見,我們通常把友元的聲明與類本身放置在同一個頭文件中(類的外部)。許多編譯器允許在尚無友元函數的初始聲明的情況下就調用它,不過最好還是提供一個獨立的函數聲明。

關鍵概念:封裝的益處

封裝有兩個重要的優點:

·確保用戶代碼不會無意間破壞封裝對象的狀態。

·被封裝的類的具體實現細節可以隨時改變,而無須調整用戶級別的代碼。

盡管當類的定義發生改變時無須更改用戶代碼,但是使用了該類的源文件必須重新編譯。

更多C++基礎概念

訪問控制與封裝