1.2.24_C++ 數(shù)據(jù)封裝

所有的 C++ 程序都有以下兩個(gè)基本要素:

  • 程序語(yǔ)句(代碼):這是程序中執(zhí)行動(dòng)作的部分泵三,它們被稱為函數(shù)

  • 程序數(shù)據(jù):數(shù)據(jù)是程序的信息,會(huì)受到程序函數(shù)的影響郑原。

封裝是面向?qū)ο缶幊讨械?strong>把數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)綁定在一起的一個(gè)概念腌紧,這樣能避免受到外界的干擾和誤用茸习,從而確保了安全。數(shù)據(jù)封裝引申出了另一個(gè)重要的 OOP 概念壁肋,即數(shù)據(jù)隱藏号胚。

數(shù)據(jù)封裝是一種把數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)捆綁在一起的機(jī)制,數(shù)據(jù)抽象是一種僅向用戶暴露接口而把具體的實(shí)現(xiàn)細(xì)節(jié)隱藏起來(lái)的機(jī)制浸遗。

C++ 通過(guò)創(chuàng)建類來(lái)支持封裝和數(shù)據(jù)隱藏(public猫胁、protected、private)跛锌。我們已經(jīng)知道弃秆,類包含私有成員(private)、保護(hù)成員(protected)和公有成員(public)成員髓帽。默認(rèn)情況下菠赚,在類中定義的所有項(xiàng)目都是私有的。例如:

class Box
{
   public:
      double getVolume(void)
      {
         return length * breadth * height;
      }

   private:
      double length;      // 長(zhǎng)度
      double breadth;     // 寬度
      double height;      // 高度
};

變量 length郑藏、breadth 和 height 都是私有的(private)衡查。這意味著它們只能被 Box 類中的其他成員訪問(wèn),而不能被程序中其他部分訪問(wèn)译秦。這是實(shí)現(xiàn)封裝的一種方式峡捡。

為了使類中的成員變成公有的(即,程序中的其他部分也能訪問(wèn))筑悴,必須在這些成員前使用 public 關(guān)鍵字進(jìn)行聲明们拙。所有定義在 public 標(biāo)識(shí)符后邊的變量或函數(shù)可以被程序中所有其他的函數(shù)訪問(wèn)。

把一個(gè)類定義為另一個(gè)類的友元類阁吝,會(huì)暴露實(shí)現(xiàn)細(xì)節(jié)砚婆,從而降低了封裝性。理想的做法是盡可能地對(duì)外隱藏每個(gè)類的實(shí)現(xiàn)細(xì)節(jié)。

數(shù)據(jù)封裝的實(shí)例

C++ 程序中装盯,任何帶有公有和私有成員的類都可以作為數(shù)據(jù)封裝和數(shù)據(jù)抽象的實(shí)例坷虑。請(qǐng)看下面的實(shí)例:
實(shí)例

#include <iostream>
using namespace std;
 
class Adder{
   public:
      // 構(gòu)造函數(shù)
      Adder(int i = 0)
      {
        total = i;
      }

      // 對(duì)外的接口
      void addNum(int number)
      {
          total += number;
      }

      // 對(duì)外的接口
      int getTotal()
      {
          return total;
      };

   private:
      // 對(duì)外隱藏的數(shù)據(jù)
      int total;
};

int main( )
{
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);
 
   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:

Total 60

上面的類把數(shù)字相加埂奈,并返回總和迄损。公有成員 addNum 和 getTotal 是對(duì)外的接口,用戶需要知道它們以便使用類账磺。私有成員 total 是對(duì)外隱藏的芹敌,用戶不需要了解它,但它又是類能正常工作所必需的垮抗。

設(shè)計(jì)策略

通常情況下氏捞,我們都會(huì)設(shè)置類成員狀態(tài)為私有(private),除非我們真的需要將其暴露冒版,這樣才能保證良好的封裝性液茎。

這通常應(yīng)用于數(shù)據(jù)成員,但它同樣適用于所有成員辞嗡,包括虛函數(shù)捆等。

代碼鏈接:https://github.com/karst87/cpp/tree/master/learning/com.runoob

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市欲间,隨后出現(xiàn)的幾起案子楚里,更是在濱河造成了極大的恐慌,老刑警劉巖猎贴,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件班缎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡她渴,警方通過(guò)查閱死者的電腦和手機(jī)达址,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)趁耗,“玉大人沉唠,你說(shuō)我怎么就攤上這事】涟埽” “怎么了满葛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)罢屈。 經(jīng)常有香客問(wèn)我嘀韧,道長(zhǎng),這世上最難降的妖魔是什么缠捌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任锄贷,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘谊却。我一直安慰自己柔昼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布炎辨。 她就那樣靜靜地躺著捕透,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹦魔。 梳的紋絲不亂的頭發(fā)上激率,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音勿决,去河邊找鬼。 笑死招盲,一個(gè)胖子當(dāng)著我的面吹牛低缩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播曹货,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼咆繁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了顶籽?” 一聲冷哼從身側(cè)響起玩般,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎礼饱,沒(méi)想到半個(gè)月后坏为,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镊绪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年匀伏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝴韭。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡够颠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出榄鉴,到底是詐尸還是另有隱情履磨,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布庆尘,位于F島的核電站剃诅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏减余。R本人自食惡果不足惜综苔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧如筛,春花似錦堡牡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至妖胀,卻和暖如春芥颈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赚抡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工爬坑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涂臣。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓盾计,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親赁遗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子署辉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • C++文件 例:從文件income. in中讀入收入直到文件結(jié)束,并將收入和稅金輸出到文件tax. out岩四。 檢查...
    SeanC52111閱讀 2,754評(píng)論 0 3
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法哭尝,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法剖煌,繼承相關(guān)的語(yǔ)法材鹦,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,581評(píng)論 18 399
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評(píng)論 25 707
  • 01 隔壁劉阿姨最近精神狀態(tài)不佳,走路常常心不在焉箩做,遇到有人主動(dòng)跟她打招呼她也是懨懨的懶得開(kāi)口莽红。 在我印象里,劉阿...
    菀彼青青閱讀 2,690評(píng)論 29 35
  • 你在外地打工邦邦, 她在家鄉(xiāng)等你安吁。 等你等到秋風(fēng)起, 等你等到雪花飛燃辖, 還未見(jiàn)到你…… 你在哪里鬼店? 她何時(shí)才能等到你?
    小劇在成長(zhǎng)閱讀 191評(píng)論 2 5