Абстрактный класс C ++ и чистая виртуальная функция

В этом руководстве мы узнаем об абстрактных виртуальных функциях и абстрактных классах с помощью примеров.

Прежде чем мы узнаем о чистых виртуальных функциях, обязательно ознакомьтесь с этими руководствами:

  • Наследование C ++
  • Виртуальные функции C ++

Чистые виртуальные функции C ++

Используются чистые виртуальные функции

  • если функция не используется в базовом классе
  • но функция должна быть реализована всеми ее производными классами

Возьмем пример,

Предположим, мы получили Triangle, Squareи Circleклассы из Shapeкласса, и мы хотим , чтобы вычислить площадь всех этих форм.

В этом случае мы можем создать чистую виртуальную функцию с именем calculateArea()в Shape. Поскольку это чистая виртуальная функция, все производные классы Triangle, Squareи Circleдолжна включать в себя calculateArea()функцию с реализацией.

Чистая виртуальная функция не имеет тела функции и должна заканчиваться на = 0. Например,

 class Shape ( public: // creating a pure virtual function virtual void calculateArea() = 0; );

Примечание . = 0Синтаксис не означает, что мы присваиваем функции 0. Именно так мы определяем чистые виртуальные функции.

Абстрактный класс

Класс, содержащий чистую виртуальную функцию, известен как абстрактный класс. В приведенном выше примере класс Shapeявляется абстрактным.

Мы не можем создавать объекты абстрактного класса. Однако мы можем наследовать от них классы и использовать их члены-данные и функции-члены (кроме чисто виртуальных функций).

Пример: абстрактный класс C ++ и чистая виртуальная функция

 // C++ program to calculate the area of a square and a circle #include using namespace std; // Abstract class class Shape ( protected: float dimension; public: void getDimension() ( cin>> dimension; ) // pure virtual Function virtual float calculateArea() = 0; ); // Derived class class Square : public Shape ( public: float calculateArea() ( return dimension * dimension; ) ); // Derived class class Circle : public Shape ( public: float calculateArea() ( return 3.14 * dimension * dimension; ) ); int main() ( Square square; Circle circle; cout << "Enter the length of the square: "; square.getDimension(); cout << "Area of square: " << square.calculateArea() << endl; cout << "Enter radius of the circle: "; circle.getDimension(); cout << "Area of circle: " << circle.calculateArea() << endl; return 0; )

Вывод

 Введите длину, чтобы вычислить площадь квадрата: 4 Площадь квадрата: 16 Введите радиус для вычисления площади круга: 5 Площадь круга: 78,5

В этой программе virtual float calculateArea() = 0;внутри Shapeкласса находится чистая виртуальная функция.

Вот почему мы должны обеспечить реализацию calculateArea()в обоих наших производных классах, иначе мы получим ошибку.

Интересные статьи...