Latest web development tutorials

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

これは、特定の実装クラスを完了する必要がなく、インターフェースと機能クラスの動作について説明します。

C ++インタフェースは抽象クラス、抽象クラスを使用して実装され、データの抽象化と混同していない、データの抽象化は、分離されたデータに関連付けられた実装の詳細の概念です。

少なくとも1つの機能クラスは純粋仮想関数として宣言されている場合、このクラスは抽象クラスです。 以下のように、指定された文で "= 0"を使用して、純粋仮想関数:

class Box
{
   public:
      // 纯虚函数
      virtual double getVolume() = 0;
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};

目的は、他のクラスは、適切な基底クラスを継承することができます与えることである(一般的にABCと呼ばれる)抽象クラスを設計ます。抽象クラスは、オブジェクトをインスタンス化するために使用することができない、それは唯一のインターフェースとして使用することができます あなたは抽象クラスのオブジェクトをインスタンス化しようとすると、コンパイルエラーになります。

ABCのサブクラスをインスタンス化する場合はそのため、あなたはそれぞれの仮想関数を実装する必要があり、それはまた、C ++はABCステートメントインターフェースの使用をサポートすることを意味します。 派生クラス内ではオーバーロード純粋仮想関数が存在しない場合は、このクラスのオブジェクトをインスタンス化しようと、コンパイルエラーが発生します。

クラスは、オブジェクトが具象クラスと呼ばれているインスタンス化するために使用することができます

抽象クラスのインスタンス

次の例を考えてみましょう、基本クラスの形状は、インタフェースのgetArea()を、2つの派生クラスのRectangleとトライアングルがのgetArea()で実現された提供しています

#include <iostream>
 
using namespace std;
 
// 基类
class Shape 
{
public:
   // 提供接口框架的纯虚函数
   virtual int getArea() = 0;
   void setWidth(int w)
   {
      width = w;
   }
   void setHeight(int h)
   {
      height = h;
   }
protected:
   int width;
   int height;
};
 
// 派生类
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);
   // 输出对象的面积
   cout << "Total Rectangle area: " << Rect.getArea() << endl;

   Tri.setWidth(5);
   Tri.setHeight(7);
   // 输出对象的面积
   cout << "Total Triangle area: " << Tri.getArea() << endl; 

   return 0;
}

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

Total Rectangle area: 35
Total Triangle area: 17

上記の例から、私たちは抽象クラスがインタフェースのgetArea()を定義する方法を見ることができ、2つの派生クラスは、同じ機能を達成するために、異なるアルゴリズムの面積を計算する方法です。

設計戦略

オブジェクト指向システムは、抽象基底クラスは、すべての外部アプリケーションに適した、一般的な、標準化されたインタフェースを提供し使用することができます。 そして、抽象基本クラスから継承し、派生クラスでは、そのようなすべての操作が継承されている置きます。

純粋仮想関数が存在する抽象基本クラスの形で提供される機能(すなわちパブリック関数)外部アプリケーション。 これらの純粋仮想関数は、対応する派生クラスで実装されています。

このアーキテクチャは、新しいアプリケーションが容易にシステムがまだそのように定義することができた後でも、システムに追加することができる可能にします。