Latest web development tutorials

C ++ интерфейс (абстрактный класс)

Она описывает поведение интерфейса и функционального класса, без необходимости завершения определенного класса реализации.

Интерфейс C ++ реализован с использованиемабстрактного класса, абстрактный класс и не следует путать с абстракции данных, абстракции данных является понятие деталей реализации , связанных с данными , разделенными.

Если хотя бы одна функция класса объявляется как чисто виртуальной функции, то этот класс является абстрактным классом. Чистая виртуальная функция с помощью "= 0" в заявлении указано, следующим образом:

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

Дизайнабстрактный класс (обычно называемый ABC) Цель состоит в том, чтобы дать другой класс может наследовать соответствующий базовый класс.Абстрактный класс не может быть использован для создания экземпляра объекта, он может быть использован только вкачестве интерфейса.Если вы попытаетесь создать объект абстрактного класса, это приведет к ошибке компиляции.

Поэтому, если ABC подкласс инстанциируется, вы должны реализовать каждую виртуальную функцию, это также означает, что C ++ поддерживает использование интерфейса операторов ABC. Если нет перегрузки чисто виртуальная функция в производном классе, попытаться создать экземпляр объекта этого класса вызовет ошибку компиляции.

Класс может быть использован для создания экземпляра объекта называетсяконкретным классом.

Экземпляр абстрактного класса

Рассмотрим следующие примеры, базовый класс Shape предоставляет интерфейс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 (), два производных классов, как вычислить площадь другого алгоритма для достижения той же функции.

Разработка стратегии

Объектно-ориентированные системы могут использовать абстрактный базовый класс обеспечивает соответствующий, общий, стандартизированный интерфейс для всех внешних приложений. Тогда, производный класс с помощью наследования от абстрактного базового класса, положить все такие операции по наследству.

Функция (т.е. публичная функция) внешние приложения, предоставляемые в виде абстрактного базового класса существуют чисто виртуальные функции. Эти чистые виртуальные функции реализованы в соответствующем производном классе.

Эта архитектура также позволяет использовать новые приложения могут быть легко добавлены в систему, даже после того, как система по-прежнему может быть так определены.