假設有乙個public成員變數,當取消它時、所有使用它的客戶**都會被破壞。因此public成員變數完全沒有封裝性。假設有乙個protected成員變數,當取消它時、所有使用它的derived classes都會被破壞。
所有反對public成員變數的論點同樣適用於protected。其封裝性並不比public好
語法一致性:使用不同的訪問許可權可以使函式對成員變數的處理有更精確的控制。如可以實現「唯讀」、「只寫」、「讀寫等訪問許可權」,如下**
class accesslevel
voidsetreadwrite(int value)
intgetreadwrite() const
voidsetwriteonly(int value)
private:
intnoaccess; //無任何訪問
intreadonly; //唯讀
intreadwrite; //讀寫
intwriteonly; //只寫
};
把成員變數隱藏在函式介面後面,可以為「所有可能的實現提供彈性」,封裝後,只有成員函式可以影響它們,不封裝時、改變public的事情會受到很大束縛,因為那會破壞大多客戶端**。
需要記住的:
1、切記將成員變數宣告為private。這可賦予資料訪問的一至性,可細微劃分訪問控制,允諾約束條件獲得保證。並為class的實現提供充分的彈性。
2、protected並不比public更具封裝性。
條款22 將成員變數宣告為private
條款22 將成員變數宣告為private declare data members private.內容 首先我們討論一下成員變數宣告為public的情況,我們先從語法一致性角度來分析,如果成員變數不是public,那麼客戶訪問這些變數唯一的方法只能是通過訪問成員函式,由於這個時候public介面內...
條款22 將成員變數宣告為private
為什麼要將成員變數宣告為private 1.為了語法的一致性 訪問class成員變數時不需要使用小括號,訪問class成員函式時需要使用小括號。2.使用函式可以讓你對成員變數的處理有更精準的控制 可以實現 唯讀 只寫 3.最重要的,是為了封裝。封裝的好處 可以為所有可能的實現提供彈性 如新增通知 驗...
條款22 將成員變數宣告為private
將所有成員變數都宣告private,剩下的成員就是成員函式了。那麼外部訪問時都得要帶括號,因為只可以訪問成員函式。如果令成員變數為public,每個人都可以讀寫它,但是如果你以函式取得或設定其值,你就可以實現出 不可訪問 唯讀訪問 讀寫訪問 protected 和public其實是一樣的,無論從一致...