條款22:將成員變數宣告為private
作為學生黨,經常在**裡把變數宣告為public,在外部直接進行訪問了事。這個條款告訴我們,這樣做是非常不科學的。
1,private能夠提供非常完善的許可權控制,你可以直接控制乙個變數是唯讀,還是可讀可寫,甚至是只寫。而不是把使用這個類的各種許可權全部公開。
2,private對資料進行了封裝,減少了資料被外界訪問的機會,方便了**的維護。
class base;
試想有這樣的乙個類,其中的資料全部為public,那麼外界可以直接對name和data這個資料進行各種讀寫操作。如果某一天需要對類進行修改,把name變為string型別,那麼之前的那些**將會幾乎全部作廢。
如果在最初把name設為private,只提供公有的讀寫函式,就可以避免上面現象的產生,因為name出現變化,只需要修改相應的讀寫函式就可以了。
protected並不比public更具備封裝性
如果不存在繼承關係,那麼protected和private相同。
但如果存在繼承關係時,protected標識的成員變數,在它的子類中仍可以直接訪問,所以封裝性就會受到衝擊。這時候對父類進行修改,那麼子類仍然要進行修改。這會造成麻煩
《Effective C艹》讀書筆記(1)
條款01 把c 當作乙個語言聯邦 c 不是簡單的 新增了物件導向特性的c語言 我們可以認為c 是由以下四個次語言組成的語言。2,物件導向c 這一部分包含了 封裝,繼承,多型,等等物件導向程式設計語言最直觀的特徵。3,template c 泛型程式設計。4,stl 是乙個template程式庫。包含有...
《Effective C艹》讀書筆記(12)
條款十八 讓介面容易被正確使用,不易被誤用 如果我們設計乙個日期類,可能會寫成如下的模樣 class date 這個建構函式貌似沒有問題,但是她卻無法阻止使用者輸入錯誤的資料。比如使用者可能會把date 3,30,2015 寫成date 30,3,2015 所以說其實當你設計的程式需要假定使用者都能...
《Effective C艹》讀書筆記(14)
條款21 當必須返回物件時,別妄想返回其reference 並不是在任何情況下都可以通過傳引用的方式返回值。看下面這段 const rational operator const rational r1,const rational r2 事實上,任何對這個函式返回值的讀寫操作都將返回錯誤,因為返回...