C ++
 Computer >> コンピューター >  >> プログラミング >> 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;
class Shape { // Base class
   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;
};

class Rectangle: public Shape { // Derived classes
   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つのクラスが同じ関数を実装したが、形状に固有の領域を計算するためのアルゴリズムが異なることがわかります。

設計戦略

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

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

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


  1. newを使用してC++で2D配列を宣言するにはどうすればよいですか

    動的2D配列は、基本的に配列へのポインターの配列です。これは、寸法が3x4の2D配列の図です。 アルゴリズム Begin    Declare dimension of the array.    Dynamic allocate 2D array a[][] using new.    Fill the array with the elements.    Print the array.    Clear the memory by deleting it. End サンプルコード

  2. Pythonクラスでグローバル変数を宣言するにはどうすればよいですか?

    グローバル変数 はグローバルスコープを持つ変数です。つまり、シャドウされていない限り、プログラム全体で表示およびアクセスできます。すべてのグローバル変数のセットは、プログラムのグローバル環境またはグローバルスコープと呼ばれます。 変数の前にキーワードglobalを使用して、変数globalを宣言します。すべての変数には、宣言および定義されたブロックのスコープがあります。これらの変数は、宣言のポイントの後でのみ使用できます。 例 グローバル変数宣言の例 def f():             global s