條款22 :將成員變數聲明為private

來源:互聯網
上載者:User

首先看看為什麼成員變數不該是public的,然後讓你看看所有反對public成員變數的論點同樣適用於protected成員變數。最後匯出一個結論,所有的成員變數都應該是private的。

一.文法一致性。如果成員變數不是public的,那麼所有的訪問成員變數,都變成了函數,所以就不存在是不是有括弧的問題了。

二.使用成員函數會讓你對成員變數有更加精確的控制。因此你可以設計出“不準訪問(不寫對應此成員的函數)”,“唯讀訪問(const)”,“讀寫訪問”。

三.封裝。如果你通過函數訪問成員變數,日後,當你想用某個計算替換這個成員變數,而class客戶一點也不知道class的內部實現已經起了變化。

 

成員變數的封裝性與“成員變數的內容改變時所破壞的代碼數量”成反比。所謂改變,也許是從class中移除它。

假設我們有一個public成員變數,而我們最終要出取消它。多少代碼會被破壞掉呢?

所有使用它的代碼都會被破壞,所以public成員變數完全沒有封裝性。假設是一個protected變數呢?所有使用它的子類都會被破壞。

 

請記住:

  • 切記將成員變數聲明為private。這可賦予客戶訪問資料的一致性、可細微劃分存取控制、允許約束條件獲得保證,並提供class作者以充分的實現彈性。
  • Protected並不比public更具有封裝性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.