インターフェイスは、完全な特定の実装クラスを必要とせずに、クラスの動作や機能を説明しています。 C ++ インタフェースは抽象クラス、抽象クラスを使用して実装し、データ抽象化と混同しないが、データ抽象化は、データに関連付けられた分離された実装の詳細の概念です。 少なくとも機能クラスは純粋仮想関数として宣言されているが存在する場合、このクラスは抽象クラスです。純粋仮想関数を使用して宣言された「= 0 」次のように指定されている: クラスボックス { パブリック: // 純粋仮想関数 仮想 ダブル getVolume()= 0 ; プライベート: ダブル長; // 長さ ダブル幅; // 幅 ダブル高さ; // 高さ }; (一般ABCと呼ばれる)抽象クラスに設計され、他のクラスを継承することができるのに適した基本クラスを提供します。抽象クラスは、オブジェクトをインスタンス化するために使用することはできません、それが唯一のインターフェースとして使用することができます。あなたは抽象クラスのオブジェクトをインスタンス化しようとすると、それはコンパイルエラーにつながります。 ABCサブクラスがインスタンス化されている場合ので、あなたはそれがまた、Cということを意味し、各仮想関数を実装する必要があります ++はABC文インタフェースの使用をサポートしています。あなたは派生クラスで純粋仮想関数をオーバーライドしていない場合は、コンパイルエラーが発生する可能性があり、このクラスのオブジェクトをインスタンス化してみてください。 クラスは、具体的なクラスと呼ばれるオブジェクトをインスタンス化するために使用することができます。
次の例を考え、基本クラスは、のgetArea形状()へのインタフェース、及び矩形トライアングルのgetArea()で達成された2つの派生クラスを提供する: の#include <iostreamの> 使用して名前空間STDを; // 基底クラスのクラスの形 { 公共: //は、インタフェースフレームワーク純粋仮想関数を提供する仮想INTのgetArea()= 0 ; 空隙にsetWidth(INT W) { 幅 = W; } ボイド setHeightメソッド(int型H) { 高さ = H; } 保護: INT 幅; int型の高さ。 }。 // 派生类 クラス長方形:公共の形状 { パブリック: int型のgetArea() { リターン(幅* 高さ)。 } }。 クラストライアングル:公共形 { パブリック: INT のgetArea() { リターン(幅*高さ)/ 2 。 } }。 INT(メインボイド) { 長方形のRect。 トライアングルトライ。 Rect.setWidth(5。); Rect.setHeight(7 ); // エリア出力対象 COUT << " 総長方形エリア:" << Rect.getArea()<< ; ENDL (Tri.setWidth 。5 ); Tri.setHeight (7 ); // エリア出力対象 COUT << 「総面積トライアングル:」 << Tri.getArea()<< ENDL; 戻り 0 ; }
上記の例から、我々は、抽象クラスのどの定義を参照することができインタフェースのgetArea()、2つの派生クラスは、アルゴリズムの異なる領域によって計算される方法と同じ機能を達成することです。
設計戦略
オブジェクト指向システムは、抽象基底クラスは、すべての外部のアプリケーションに適した、一般的な、標準化されたインターフェースを提供し使用してもよいです。その後、派生クラスは抽象基底クラスを継承し、同様の操作は、すべてが継承入れています。
外部アプリケーションは、純粋仮想関数の形で機能(すなわち、パブリック関数)を提供する抽象基底クラスで存在します。これらの純粋仮想関数は、それぞれの派生クラスで実装されています。
このアーキテクチャは、新しいアプリケーションが簡単にシステムがまだ定義することができますのでた後も、システムに追加することができますことができます。