C ++データのカプセル化
すべてのC ++プログラムは、2つの基本的な要素を持っています:
- プログラムステートメント(コード):これは、アクションを実行するためのプログラムの一部である、彼らは機能と呼ばれています。
- プログラムデータ:データは、番組情報、プログラムの機能には影響されています。
カプセル化は、関数データにおけるオブジェクト指向プログラミングの概念であるので、それによって安全性を確保し、外部からの干渉や誤使用を避けるために、一緒にバインドされたデータを操作します。 データのカプセル化は、もう一つの重要なOOPの概念、すなわち、データ隠蔽から出てきます。
データのカプセル化は、データを機能するための機構であり、データ操作バンドルされたデータ抽象化は、ユーザインタフェースと実装の詳細隠れたメカニズムにさらさ唯一のものです。
C ++クラスのサポートのカプセル化およびデータ隠蔽(パブリック、保護された、プライベート)を作成することによって。我々はすでに公共(パブリック)メンバーの(保護)のメンバーとメンバーを保護するために、クラスはプライベートメンバー(プライベート)が含まれていることを知っています。 デフォルトでは、クラスで定義されたすべての項目は非公開です。 例えば:
class Box { public: double getVolume(void) { return length * breadth * height; } private: double length; // 长度 double breadth; // 宽度 double height; // 高度 };
可変長、幅と高さは(プライベート)プライベートです。 これは、彼らが唯一のボックスクラスの他のメンバーによってアクセス可能であることを意味し、プログラムの他の部分にアクセスすることができません。 これは、パッケージを達成するための方法です。
これらのメンバーが宣言される前に(つまり、プログラムの他の部分がアクセスできる)パブリッククラスのメンバーになるためには、あなたは、公共のキーワードを使用する必要があります。すべての識別子は、プログラムにアクセスするには、すべての他の機能で使用できる変数や関数の背後にある公共の場で定義されています。
クラスが別のクラスの友人のように定義され、それによってカプセル化を低減、実装の詳細を公開することになります。 理想的には、各クラスの可能な外皮の実装の詳細な限り。
データパッケージの例
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
数字以上のクラスが一緒に合計を返します。 公開メンバーaddNumとgetTotalは外部インタフェースであり、ユーザは自分のクラスを使用するために知っておく必要があります。 外国の民間メンバーが隠されている合計 、ユーザーがそれを理解する必要はありませんが、それは必要な通常のクラスの仕事です。
設計戦略
私たちは本当に露出する必要がある場合を除き、良好な封入を確実にするように通常の状況下で、我々は、プライベートクラスのメンバ状態(プライベート)を設定します。
これは、通常、データメンバに適用されるが、それは仮想関数を含むすべてのメンバーにも同様に適用可能です。