У цьому підручнику ми дізнаємося про абстрактні віртуальні функції та абстрактні класи за допомогою прикладів.
Перш ніж ми дізнаємося про чисто віртуальні функції, обов’язково перевірте ці підручники:
- Успадкування С ++
- Віртуальні функції 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()
в обох наших похідних класах, інакше ми отримаємо помилку.