최고의 C ++ 인터페이스 (추상 클래스) 튜토리얼 2024년, 이 튜토리얼에서는 추상 클래스의 인스턴스,디자인 전략,를 배울 수 있습니다.
이 특정 구현 클래스를 완료하지 않고, 인터페이스와 기능 클래스의 동작을 설명한다.
C ++ 인터페이스추상 클래스 추상 클래스를 이용하여 구현되며, 데이터 추상화와 혼동하지 않는 데이터 추상화는 분리 된 데이터와 관련된 상세한 구현하는 개념이다.
적어도 하나의 기능 클래스 순수 가상 함수로 선언 된 경우,이 클래스는 추상 클래스이다. 다음과 같이 지정된 문에서 "= 0"을 사용하여 순수 가상 함수 :
class Box { public: // 纯虚函数 virtual double getVolume() = 0; private: double length; // 长度 double breadth; // 宽度 double height; // 高度 };
목적은 다른 클래스가 해당 기본 클래스를 상속 제공하는 것이다 (일반적으로 ABC 라 칭함)추상 클래스 디자인.추상 클래스 오브젝트를 인스턴스화하는데 사용될 수없고, 그것은 단지인터페이스로서 사용될 수있다.당신이 추상 클래스의 객체를 인스턴스화하려고하면 컴파일 오류가 발생합니다.
ABC 방송의 서브 클래스가 인스턴스화 따라서, 각 가상 함수를 구현해야합니다, 또한 C ++은 ABC 문 인터페이스의 사용을 지원하는 것을 의미한다. 파생 클래스에는 오버로드 순수 가상 함수가없는 경우, 컴파일러 오류가 발생합니다이 클래스의 개체를 인스턴스화하려고합니다.
클래스는구상 클래스 호출되는 객체를 인스턴스화하는 데 사용할 수 있습니다.
다음 예를 고려, 기본 클래스의 모양은인터페이스의 getArea ()를, 두 개의 파생 클래스 사각형과 삼각형이의 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 ()를 정의하는 방법을 볼 수있는 두 가지 파생 클래스는 동일한 기능을 달성하기 위해 다른 알고리즘의 면적을 계산하는 방법이다.
객체 지향 시스템은 추상 기본 클래스는 모든 외부 애플리케이션에 적합한 일반, 표준화 된 인터페이스를 제공합니다 사용할 수 있습니다. 그런 다음, 추상 기본 클래스에서 상속에 의해 파생 된 클래스는 이러한 모든 작업을 상속했습니다.
기능 (즉, 공공 기능) 순수 가상 함수가 존재 추상 기본 클래스의 형태로 제공 외부 응용 프로그램. 이 순수 가상 함수는 해당 파생 클래스에서 구현됩니다.
이 아키텍처는 또한 새로운 어플리케이션이 쉽게 시스템이 여전히 정의 될 수 후에도 시스템에 추가 될 수 있습니다.