工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C++ のインターフェイス (抽象クラス)

インターフェイスは、そのクラスの特定の実装にコミットすることなく、C++ クラスの動作または機能を記述します。

C++ インターフェイスは、抽象クラスを使用して実装されています また、これらの抽象クラスを、実装の詳細を関連データから分離しておくという概念であるデータ抽象化と混同しないでください。

クラスは、その関数の少なくとも 1 つを 純粋仮想 として宣言することによって抽象化されます 関数。純粋仮想関数は、次のように宣言に「=0」を配置することによって指定されます-

class Box {
   public:
      // pure virtual function
      virtual double getVolume() = 0;
      
   private:
      double length;      // Length of a box
      double breadth;     // Breadth of a box
      double height;      // Height of a box
};

抽象クラスの目的 (しばしば ABC と呼ばれます) は、他のクラスが継承できる適切な基本クラスを提供することです。抽象クラスはオブジェクトのインスタンス化に使用できず、インターフェースとしてのみ機能します .抽象クラスのオブジェクトをインスタンス化しようとすると、コンパイル エラーが発生します。

したがって、ABC のサブクラスをインスタンス化する必要がある場合は、各仮想関数を実装する必要があります。つまり、ABC によって宣言されたインターフェイスをサポートします。派生クラスで純粋仮想関数をオーバーライドせずに、そのクラスのオブジェクトをインスタンス化しようとすると、コンパイル エラーになります。

オブジェクトのインスタンス化に使用できるクラスは、具象クラスと呼ばれます .

抽象クラスの例

getArea() という関数を実装するために、親クラスが基本クラスへのインターフェイスを提供する次の例を検討してください。 −

ライブデモ
#include <iostream>
 
using namespace std;
 
// Base class
class Shape {
   public:
      // pure virtual function providing interface framework.
      virtual int getArea() = 0;
      void setWidth(int w) {
         width = w;
      }
   
      void setHeight(int h) {
         height = h;
      }
   
   protected:
      int width;
      int height;
};
 
// Derived classes
class Rectangle: public Shape {
   public:
      int getArea() { 
         return (width * height); 
      }
};

class Triangle: public Shape {
   public:
      int getArea() { 
         return (width * height)/2; 
      }
};
 
int main(void) {
   Rectangle Rect;
   Triangle  Tri;
 
   Rect.setWidth(5);
   Rect.setHeight(7);
   
   // Print the area of the object.
   cout << "Total Rectangle area: " << Rect.getArea() << endl;

   Tri.setWidth(5);
   Tri.setHeight(7);
   
   // Print the area of the object.
   cout << "Total Triangle area: " << Tri.getArea() << endl; 

   return 0;
}

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

Total Rectangle area: 35
Total Triangle area: 17

抽象クラスが getArea() に関してインターフェースを定義した方法と、他の 2 つのクラスが同じ関数を実装した方法を確認できますが、形状に固有の面積を計算するアルゴリズムは異なります。

戦略の設計

オブジェクト指向システムは、抽象基本クラスを使用して、すべての外部アプリケーションに適した共通の標準化されたインターフェイスを提供する場合があります。次に、その抽象基本クラスからの継承を通じて、同様に動作する派生クラスが形成されます。

外部アプリケーションによって提供される機能 (つまり、パブリック関数) は、抽象基本クラスの純粋な仮想関数として提供されます。これらの純粋仮想関数の実装は、アプリケーションの特定のタイプに対応する派生クラスで提供されます。

また、このアーキテクチャにより、システムが定義された後でも、新しいアプリケーションをシステムに簡単に追加できます。


C言語

  1. C# の抽象クラスとメソッド
  2. C++ 演算子
  3. C++ クラスとオブジェクト
  4. C++ フレンド関数とフレンド クラス
  5. C++ クラス テンプレート
  6. Java 抽象クラスと抽象メソッド
  7. C ++の構造とクラス
  8. 例を含む C# 抽象クラスのチュートリアル:抽象化とは?
  9. Java - オブジェクトとクラス
  10. Java-抽象化
  11. Java-インターフェース