Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 인터페이스를 어떻게 선언합니까?

<시간/>

인터페이스는 해당 클래스의 특정 구현을 커밋하지 않고 C++ 클래스의 동작 또는 기능을 설명합니다.

C++ 인터페이스는 추상 클래스를 사용하여 구현되며 이러한 추상 클래스는 구현 세부 정보를 연결된 데이터와 분리하여 유지하는 개념인 데이터 추상화와 혼동되어서는 안 됩니다.

클래스는 최소한 하나의 함수를 순수 가상 함수로 선언함으로써 추상화됩니다. 순수한 가상 함수는 다음과 같이 선언에 "=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() 측면에서 인터페이스를 정의하고 두 개의 다른 클래스가 동일한 기능을 구현하지만 모양에 특정한 영역을 계산하기 위해 다른 알고리즘을 사용하는 방법을 볼 수 있습니다.

디자인 전략

객체 지향 시스템은 추상 기본 클래스를 사용하여 모든 외부 응용 프로그램에 적합한 공통의 표준화된 인터페이스를 제공할 수 있습니다. 그런 다음 해당 추상 기본 클래스의 상속을 통해 유사하게 작동하는 파생 클래스가 형성됩니다.

외부 응용 프로그램에서 제공하는 기능(즉, 공개 기능)은 추상 기본 클래스에서 순수 가상 기능으로 제공됩니다. 이러한 순수 가상 기능의 구현은 애플리케이션의 특정 유형에 해당하는 파생 클래스에서 제공됩니다.

또한 이 아키텍처를 사용하면 시스템이 정의된 후에도 새 응용 프로그램을 시스템에 쉽게 추가할 수 있습니다.