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


すべての C++ プログラムには、次の 2 つの基本要素があります:

  • プログラム ステートメント (コード): これは、アクションを実行するプログラムの部分であり、関数と呼ばれます。

  • 番組データ: データは番組情報であり、番組の機能の影響を受けます。

カプセル化は、データとデータを操作する関数を結合するオブジェクト指向プログラミングの概念です。これにより、外部からの干渉や悪用を回避し、セキュリティを確保できます。データのカプセル化は、別の重要な OOP 概念、つまり データ隠蔽 につながります。

データのカプセル化は、データとデータ上で動作する関数をバンドルするメカニズムです。データ抽象化は、インターフェイスのみをユーザーに公開し、特定の実装の詳細を隠すメカニズムです。

C++ は、クラスを作成することにより、カプセル化とデータ隠蔽 (パブリック、プロテクト、プライベート) をサポートします。クラスにはプライベート、プロテクト、パブリックのメンバーが含まれていることはすでにわかっています。デフォルトでは、クラスで定義されたすべての項目はプライベートです。例:

class Box
{
   public:
      double getVolume(void)
      {
         return length * breadth * height;
      }
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};

変数の長さ、幅、高さはすべてプライベートです。これは、Box クラスの他のメンバーのみがアクセスでき、プログラムの他の部分からはアクセスできないことを意味します。これはカプセル化を実現する 1 つの方法です。

クラスのメンバーをパブリックにする (つまり、プログラムの他の部分からアクセスできる) には、これらのメンバーの前に public キーワードを使用して宣言する必要があります。パブリック識別子の後に定義されたすべての変数または関数は、プログラム内の他のすべての関数からアクセスできます。

クラスを別のクラスのフレンドクラスとして定義すると、実装の詳細が公開されるため、カプセル化が削減されます。理想的なアプローチは、各クラスの実装の詳細を外部から可能な限り隠すことです。

データ カプセル化のインスタンス

C++ プログラムでは、パブリック メンバーとプライベート メンバーを持つ任意のクラスをデータ カプセル化とデータ抽象化のインスタンスとして使用できます。以下の例を参照してください:

#include <iostream>
using namespace std;

class Adder{
   public:
      // 构造函数
      Adder(int i = 0)
      {
        total = i;
      }
      // 对外的接口
      void addNum(int number)
      {
          total += number;
      }
      // 对外的接口
      int getTotal()
      {
          return total;
      };
   private:
      // 对外隐藏的数据
      int total;
};
int main( )
{
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);

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

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

Total 60

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

設計戦略

通常、適切な カプセル化 を確保するために、本当に公開する必要がない限り、クラス メンバーのステータスをプライベートに設定します。

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