Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык 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;
 
// Base class
class Shape {
   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;
};
 
// Derived classes
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);
   
   // 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(), а два других класса реализуют ту же функцию, но с другим алгоритмом для вычисления области, характерной для фигуры.

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

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

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

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


Язык C

  1. Абстрактный класс и метод С#
  2. Операторы С++
  3. Классы и объекты С++
  4. Дружественные функции C++ и дружественные классы
  5. Шаблоны классов С++
  6. Абстрактный класс Java и абстрактные методы
  7. Структуры и классы в C ++
  8. Учебное пособие по абстрактному классу C # с примером:что такое абстракция?
  9. Java — объект и классы
  10. Java — абстракция