數(shù)據(jù)封裝

2018-08-12 22:03 更新

數(shù)據(jù)封裝

所有的 C++ 程序是由以下兩個基本要素組成:

  • 程序語句(代碼):這是程序執(zhí)行行為的一部分,他們被稱為函數(shù)?!   ?/li>
  • 程序數(shù)據(jù):數(shù)據(jù)是受程序函數(shù)影響的信息。

封裝是一個面向?qū)ο缶幊痰母拍?,它將?shù)據(jù)和操作數(shù)據(jù)的函數(shù)結(jié)合在一起,并使其免受外部干擾和誤用。數(shù)據(jù)封裝是數(shù)據(jù)隱藏的重要面向?qū)ο缶幊谈拍睢?/p>

數(shù)據(jù)封裝是一種將數(shù)據(jù)和使用數(shù)據(jù)的函數(shù)結(jié)合在一起的機制;數(shù)據(jù)抽象是一種只將接口公開并且向用戶隱藏實現(xiàn)細節(jié)的機制。

C++ 支持封裝的屬性和通過創(chuàng)建用戶定義類型實現(xiàn)的數(shù)據(jù)隱藏,這稱為類。我們已經(jīng)研究過,一個類可以包含私有、保護和公有成員。默認情況下,所有定義在一個類中的成員是私有的。例如:

    class Box
    {
       public:
      double getVolume(void)
      {
     return length * breadth * height;
      }
       private:
      double length;  // Length of a box
      double breadth; // Breadth of a box
      double height;  // Height of a box
    };

變量 length 、breadth 和 height 都是私有的。這意味著只有 box 類的其他成員可以訪問它們,而程序的任何其它的部分不能訪問它們。這是一個封裝的實現(xiàn)方式?!   ?/p>

要想使類的某個部分成為共有的(即訪問您的程序的其他部分),你必須在 public 關(guān)鍵字后聲明它們。公有說明符后定義的所有變量或函數(shù)可以被程序中的其它函數(shù)訪問?!   ?/p>

使一個類成為其它類的友元類就可以獲得實現(xiàn)細節(jié),降低封裝。這個思想就是獲得盡可能多的每個類的對其它類隱藏的細節(jié)。

數(shù)據(jù)封裝的例子

任何一個實現(xiàn)有公有和私有成員的類的 C++ 程序都是一個數(shù)據(jù)封裝和數(shù)據(jù)抽象的例子??紤]下面的例子:

    #include <iostream>
    using namespace std;

    class Adder{
       public:
      // constructor
      Adder(int i = 0)
      {
    total = i;
      }
      // interface to outside world
      void addNum(int number)
      {
      total += number;
      }
      // interface to outside world
      int getTotal()
      {
      return total;
      };
       private:
      // hidden data from outside world
      int total;
    };
    int main( )
    {
       Adder a;

       a.addNum(10);
       a.addNum(20);
       a.addNum(30);

       cout << "Total " << a.getTotal() <<endl;
       return 0;
    }

編譯和執(zhí)行上面的代碼時,它產(chǎn)生以下結(jié)果:

    Total 60

上面的類實現(xiàn)了把數(shù)字加起來,并且返回總和。公有成員 addNumgetTotal 是對外的接口,用戶需要知道他們才能使用的類。私有成員 total 是用戶不需要知道的,但是它是為保證程序正常運行類所必要的。

設(shè)計策略

經(jīng)過一段痛苦的經(jīng)歷,我們大多數(shù)人已經(jīng)學會了使類成員在默認情況下是私有的,除非我們真的需要使它們變成公有的。這就是一個好的的封裝?!   ?/p>

這個知識被頻繁的應用于數(shù)據(jù)成員,它同樣適用于所有成員,包括虛函數(shù)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號