一、c++的訪問控制
在任何關係中,設立相關各方面都遵從的邊界很重要。需要控制對結構成員的訪問有兩個理由:1)讓客戶程式設計師遠離一些他們不需要的工具(他們很容易知道什麼是重要的,什麼是可以忽略的);2)允許庫的設計者改變內部實現,而不必擔心會對客戶程式設計師產生影響。
訪問控制通常是指實現細節的隱藏。
public意味著在其後宣告的所有成員可以被所有的人訪問。
private意味著除了該型別的建立者和類的內部成員函式之外,任何人都不能訪問。
protected意味著就這個類的使用者而言,它是private的,但它可被從這個類繼承的任何類使用。
友元(friend):允許乙個不屬於當前結構的成員函式訪問當前結構中的資料。乙個friend必須在乙個結構內宣告。可以把乙個全域性函式宣告為friend,也可以把另外乙個結構中的成員函式甚至整個結構都宣告為friend。巢狀的結構並不能自動獲得訪問private成員的許可權,要獲得訪問私有成員的許可權,必須遵守特定的規則:首先宣告乙個巢狀的結構,然後宣告它是全域性範圍使用的乙個friend,最後定義這個結構(結構的定義必須與friend宣告分開,否則編譯器將不把它看做成員)。
二、物件布局
在乙個特定的「訪問塊」(被訪問說明符限定的一組宣告)內,這些變數在記憶體中肯定是連續存放的(然而這些訪問塊本身可以不按宣告的順序在物件中出現)。雖然編譯器通常都是按訪問塊出現的順序給它們分配記憶體,但並不是一定要這樣,因為特定機器的體系結構和操作環節可對private成員和protected成員提供明確的支援,將其放在特定的記憶體位置上。
程式開始執行之前,所有的訪問說明資訊都消失了(訪問說明資訊通常是在編譯期間消失的)。
三、類(class)
class中的成員預設為private,而struct中的成員預設為public。
易碎的基類問題(fragile base-class problem):程式設計師無論何時修改了乙個類,無論修改的是公共的介面部分還是私有成員的宣告部分,他都必須再次編譯包含標頭檔案的所有檔案。
C 程式設計思想筆記 隱藏實現
友元 如果程式設計師想允許不屬於當前結構的乙個成員函式訪問結構中的資料,可以在類中宣告這個函式為友元。友元必須子啊乙個類中宣告,巢狀友元 乙個巢狀的struct並不能自動地獲得訪問私有成員的許可權,要取得訪問私有成員的許可權,要先宣告乙個巢狀的struct,然後宣告它是全域性範圍使用的乙個友元。友元...
C 用友元實現資料隱藏
有時候,我們提供給第三方的c 介面,不希望暴露類的私有資料成員,此時可以這樣實現。inte ce.h 對外介面 class b class a private b pb public a a void getage void setage inte ce.cpp 內部實現 include inte ...
c 中資訊隱藏的實現
雖然將資料和函式 在一起很有好處,並使得庫容易使用,因為這可以通過隱藏名字防止名字衝突,但是,還有大量的工作可以使c 程式設計更加安全。第3章 隱藏實現 1 需要控制對結構成員的訪問有兩個理由 一是讓使用者避開一些他們不需要使用的工具,這些工具對資料型別內部的處理來說是必須的,但對於使用者特定問題的...