Cplusplus-cpp-data-encapsulation

提供:Dev Guides
移動先:案内検索

C ++でのデータのカプセル化

すべてのC ++プログラムは、次の2つの基本的な要素で構成されています-

  • プログラム文(コード)-これは、アクションを実行するプログラムの一部であり、関数と呼ばれます。
  • プログラムデータ-データは、プログラム機能の影響を受けるプログラムの情報です。

カプセル化は、オブジェクト指向プログラミングの概念であり、データとデータを操作する機能を結び付け、外部の干渉や誤用から安全に保ちます。 データのカプセル化により、*データ隠蔽*という重要なOOPコンセプトが生まれました。

  • データのカプセル化*はデータをバンドルするメカニズムであり、それらを使用する機能と*データの抽象化*はインターフェースのみを公開し、実装の詳細をユーザーから隠すメカニズムです。

C ++は、 classes と呼ばれるユーザー定義型の作成を通じて、カプセル化とデータ隠蔽のプロパティをサポートします。 クラスには、 private、protected 、および public メンバーを含めることができることを既に検討しました。 デフォルトでは、クラスで定義されているすべてのアイテムはプライベートです。 たとえば-

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
};

変数の長さ、幅、高さは private です。 つまり、それらはBoxクラスの他のメンバーのみがアクセスでき、プログラムの他の部分はアクセスできません。 これは、カプセル化を実現する1つの方法です。

クラスの一部を public (つまり、プログラムの他の部分からアクセス可能)にするには、 public キーワードの後に​​宣言する必要があります。 public指定子の後に定義されたすべての変数または関数は、プログラム内の他のすべての関数からアクセスできます。

あるクラスを別のクラスのフレンドにすると、実装の詳細が明らかになり、カプセル化が減少します。 理想は、各クラスの詳細をできるだけ他のすべてのクラスから隠しておくことです。

データのカプセル化の例

パブリックメンバーとプライベートメンバーを持つクラスを実装するC ++プログラムは、データのカプセル化とデータの抽象化の例です。 次の例を考慮してください-

#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;
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Total 60

上記のクラスは数値を加算し、合計を返します。 パブリックメンバー addNum および getTotal は外部世界へのインターフェイスであり、ユーザーはクラスを使用するためにそれらを知る必要があります。 プライベートメンバー total は、外部からは隠されていますが、クラスが適切に動作するために必要です。

戦略の設計

私たちのほとんどは、クラスメンバーを公開する必要がない限り、デフォルトでクラスメンバーをプライベートにすることを学びました。 それはちょうど良い*カプセル化*です。

これはデータメンバーに最も頻繁に適用されますが、仮想関数を含むすべてのメンバーに等しく適用されます。