1.1 設定限制
在任何關係中,存在相關各方都遵從的邊界是很重要的。當我們建立了乙個庫之後,我們就與該庫的使用者(也可以叫使用者程式設計師)建立了一種關係,他是另外的程式設計師,但他需要用我們的庫來編寫乙個應用程式或用我們的庫來建立更大的庫。
需要控制對結構成員的訪問有兩個理由:一是讓使用者避開一些他們不需要使用的工具,這些工具對資料型別內部的處理來說是必須的,但對使用者特定問題的介面來說卻不是必須的。這實際上是為使用者提供了方便,因為他們可以很容易地知道,對他們來說哪些是重要的,哪些是可以忽略的。
二是設計者可以改變 s t r u c t的內部實現,而不必擔心對使用者程式設計師產生影響。
1.2 c++的訪問控制
c + +語言引進了三個新的關鍵字,用於在 s t r u c t中設定邊界: p u b l i c、 p r i v a t e和p r o t e c t e d。它們的使用和含義從字面上就能理解。
1.3 友元
如果程式設計師想允許不屬於當前結構的乙個成員函式訪問結構中的資料,那該怎麼辦呢?他可以在s t r u c t內部宣告這個函式為友元。注意,乙個友元必須在乙個 s t r u c t內宣告,這一點很重要,因為他(和編譯器)必須能讀取這個結構的宣告以理解這個資料型別的大小、行為等方面的規則。有一條規則在任何關係中都很重要,那就是「誰可以訪問我的私有實現部分」。
程式設計師可以把乙個全域性函式宣告為友元類,也可以把另乙個 s t r u c t中的成員函式甚至整個s t r u c t都宣告為友元類。
1.4 類
訪問控制通常是指實現細節的隱藏。將函式包含到乙個 s t r u c t內(封裝)來產生一種帶資料和操作的資料型別,但由訪問控制在該資料型別之內確定邊界。這樣做的原因有兩個:首先是決定哪些使用者可以用,哪些使用者不能用。我們可以建立內部的資料結構,而使用者只能用介面部分的資料,我們不必擔心使用者會把內部的資料當作介面資料來訪問。這就直接匯出第二個原因,那就是將具體實現與介面分離開來。如果該結構被用在一系列的程式中,而使用者只是對公共的介面傳送訊息,這樣程式設計師就可以改變所有宣告為 p r i v a t e的成員而不必去修改使用者的**。
1.5 控制代碼類(handle classes)
c + +中的訪問控制允許將實現與介面部分分開,但實現的隱藏是不完全的。編譯器必須知道乙個物件的所有部分的宣告,以便建立和管理它。我們可以想象一種只需宣告乙個物件的公共介面部分的程式語言,而將私有的實現部分隱藏起來。但 c + +在編譯期間要盡可能多地做靜態型別檢查。這意味著盡早捕獲錯誤,也意味著程式具有更高的效率。然而這對私有的實現部
分來說帶來兩個影響:一是即使程式設計師不能輕易地訪問實現部分,但他可以看到它;二是造成一些不必要的重複編譯。
C 程式設計思想筆記 隱藏實現
友元 如果程式設計師想允許不屬於當前結構的乙個成員函式訪問結構中的資料,可以在類中宣告這個函式為友元。友元必須子啊乙個類中宣告,巢狀友元 乙個巢狀的struct並不能自動地獲得訪問私有成員的許可權,要取得訪問私有成員的許可權,要先宣告乙個巢狀的struct,然後宣告它是全域性範圍使用的乙個友元。友元...
C 程式設計思想學習 隱藏實現
1 c 中的訪問控制 public,private不用介紹,protected,可以被繼承的結構訪問。這裡重點一提的是protected是專為繼承而設計的。protected在所屬類的成員函式和在類的外部函式中對類的物件的可見性與private是一樣的 都不可見。而protected只有在繼承時才表...
C 程式設計思想 父類函式隱藏
當父類中有多個過載的函式,如果子類以任意一種方式重寫了父類的函式,那麼所有父類的此名字函式都會被隱藏 include include using namespace std class base intf string c const class derived1 public base 重寫隱藏另...