В этом руководстве мы узнаем об абстрактных виртуальных функциях и абстрактных классах с помощью примеров.
Прежде чем мы узнаем о чистых виртуальных функциях, обязательно ознакомьтесь с этими руководствами:
- Наследование 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()
в обоих наших производных классах, иначе мы получим ошибку.