Абстрактний клас 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()в обох наших похідних класах, інакше ми отримаємо помилку.

Цікаві статті...