Абстрактен клас на 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()в двата ни производни класа, иначе ще получим грешка.

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