技術共有

[C]パッケージ

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. 包装の定義

カプセル化は、オブジェクト指向プログラミング (OOP) の 3 つの基本機能 (カプセル化、継承、ポリモーフィズム) の 1 つです。データ(プロパティ)とそれを操作するためのメソッド(関数)を組み合わせて独立した単位(クラス)とし、オブジェクトの内部詳細を可能な限り隠し、インターフェースのみを外界に公開することを指します。この目的は、オブジェクトのデータを保護し、外部コードがオブジェクトの内部データ構造に直接アクセスするのを防ぎ、エラーを減らし、複雑さを簡素化することです。

2. 梱包の目的

  1. データ隠蔽: オブジェクトのデータを外部からの直接アクセスから保護し、データが不正に変更されるのを防ぎます。
  2. 明確なインターフェイス: 限定されたインターフェイス (メソッド) を公開することで、外部コードはこれらのインターフェイスを通じてのみオブジェクトと対話できるようになり、それによってオブジェクトの動作が明確になります。
  3. モジュラー: 関連するデータと操作を一緒にカプセル化して、コードのモジュール性と再利用性を向上させます。

3. C++ でカプセル化を実装する方法

  1. クラスの使用 : クラスを定義する際に、データ メンバー (プロパティ) を private または protected に設定し、これらのデータを操作するためのメソッドを public に設定します。このように、外部コードはクラスのプライベート メンバーに直接アクセスできませんが、パブリック メソッドを通じて間接的にのみアクセスできます。

  2. アクセス修飾子

    • public: 任意の外部コードからアクセス可能。
    • protected: クラス自体および派生クラス (サブクラス) 内でのみアクセスできます。
    • private: 派生クラスではなく、クラス自体内でのみアクセスできます。
  3. コンストラクターとデストラクター : コンストラクターを通じてオブジェクトを初期化し、デストラクターを通じてオブジェクトによって占有されているリソースをクリーンアップします。これらはオブジェクトのライフサイクルを制御するため、カプセル化の一部でもあります。

4. 例

以下は、単純な C++ ラッパーの例です。Rectangle(長方形) クラスの実装。

  1. #include <iostream>
  2. class Rectangle {
  3. private:
  4. double width; // 矩形的宽
  5. double height; // 矩形的高
  6. public:
  7. // 构造函数
  8. Rectangle(double w, double h) : width(w), height(h) {}
  9. // 设置宽度
  10. void setWidth(double w) {
  11. width = w;
  12. }
  13. // 获取宽度
  14. double getWidth() const {
  15. return width;
  16. }
  17. // 设置高度
  18. void setHeight(double h) {
  19. height = h;
  20. }
  21. // 获取高度
  22. double getHeight() const {
  23. return height;
  24. }
  25. // 计算面积
  26. double getArea() const {
  27. return width * height;
  28. }
  29. };
  30. int main() {
  31. Rectangle rect(5.0, 10.0);
  32. std::cout << "Rectangle area: " << rect.getArea() << std::endl;
  33. rect.setWidth(7.0);
  34. std::cout << "New Rectangle area: " << rect.getArea() << std::endl;
  35. return 0;
  36. }

この例では、Rectangle一般的なwidthそしてheightプロパティはプライベートになり、外部コードはプロパティに直接アクセスできなくなります。代わりに、次のようなパブリック メソッドを使用します。setWidthgetHeightそしてgetArea ) これらのプライベート プロパティにアクセスして変更します。このメソッドはデータのカプセル化を実装し、外部使用のための明確なインターフェイスを提供します。