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