C ++

Виртуална функция на C ++

Виртуална функция на C ++
В тази статия ще обсъдим виртуалната функция в езика за програмиране C ++. Виртуална функция се използва в C ++ за постигане на времетраене / динамичен полиморфизъм. Ще видим няколко примера за разбиране на концепцията за виртуалната функция в C++.

Виртуалната функция е функция член, която е дефинирана в базовия клас / родителския клас и е предефинирана в производния клас. Виртуалната функция позволява извикване на версията на производния клас на функцията, използвайки препратката или указателя към основния клас.

Нека да видим няколко примера за разбиране на концепцията за виртуална функция.

В първия пример ще видим поведението на невиртуалната функция, а след това във втория пример ще обясним поведението на виртуална функция.

Пример 1

В следния примерен код имаме два класа: базов клас и производен клас.

Основният клас има функция член, т.е.д., дисплей (). Полученият клас се наследява от базовия клас и предефинира функцията display ().

След това декларирахме указател към типа на базовия клас и му присвоихме обект от производния клас. Така че, когато извикаме функцията display (), използвайки указателя на типа на базовия клас, ще бъде извикана функцията на основния клас. Можете да видите изхода по-долу.

Но в такива случаи C ++ предоставя начин за извикване на производната функция на класа чрез деклариране на функцията на базовия клас като виртуална. Ще видим друг пример, за да разберем това.

#include
използване на пространство от имена std;
клас Base_Class

публично:
показване на празнота ()

Cout << "I am in Base class" << endl;

;
клас Derived_Class: публичен Base_Class

публично:
показване на празнота ()

Cout << "I am in Derived class" връщане 0;

Пример 2

В този пример дефинирахме функцията display () като виртуална функция в базовия клас. Единствената разлика от предишната програма е, че сме добавили виртуална ключова дума пред “void display ()” в основния клас.

Сега, ако видите изхода, той отпечатва „Аз съм в производен клас”, което показва, че функцията на производен клас се извиква.

Виртуалната ключова дума (виртуална функция) в основния клас е отговорна да гарантира, че правилната функция е извикана за обект.

#include
използване на пространство от имена std;
клас Base_Class

публично:
дисплей за виртуална празнота ()

Cout << "I am in Base class" << endl;

;
клас Derived_Class: публичен Base_Class

публично:
показване на празнота ()

Cout << "I am in Derived class" връщане 0;

Пример 3

Това е друг пример за виртуална функция. Както можете да видите в програмата по-долу, ние определихме основен клас, т.е.д., Животно. Има два производни класа: Куче и Крава. Дефинирали сме функцията eat () като виртуална в базовия клас, т.е.д., Животно. След това сме предефинирали функцията eat () и в двата производни класа, Dog и Cow.  Във функцията main () имаме указател на базовия клас, т.е.д., Animal и след това прикрепи производния клас, Dog. Така че, когато извикаме функцията eat () с помощта на показалеца на базовия клас, можем да извикаме производната версия на клас на функция eat (), i.д., функцията eat () от клас Dog. По същия начин, когато прикачим обекта на клас Cow, можем да извикаме производната версия на клас на функцията eat (), i.д., функцията eat () от класа Cow. Можете ясно да видите това поведение в изхода по-долу. 

#include
използване на пространство от имена std;
клас Животно

публично:
виртуална празнота яде ()

Cout << "Animal - base class - undefined eating behavior." << endl;

;
клас Куче: обществено животно

публично:
празно яде ()

Cout << "Dog - eat non-veg!" << endl;

;
клас Крава: обществено животно

публично:
празно яде ()

Cout << "Cow - eat veg!" a_ptr = нова крава ();
a_ptr-> яде ();
връщане 0;

Заключение

В тази статия обясних концепцията за виртуална функция в C++. C ++ поддържа различни видове полиморфизъм - статичен и динамичен полиморфизъм. С помощта на виртуална функция можем да постигнем времето на изпълнение / динамичния полиморфизъм. В тази статия разгледахме само концепцията за виртуална функция и как да постигнем полиморфизъм по време на изпълнение. Обясних три работни примера за обяснение на виртуалната функция.

Как да покажа брояч на FPS в игрите на Linux
Linux игрите получиха голям тласък, когато Valve обяви поддръжка на Linux за Steam клиент и техните игри през 2012 г. Оттогава много AAA и независими ...
Как да изтеглите и пуснете Civilization VI на Сид Майер на Linux
Въведение в играта Civilization 6 е модерен поглед върху класическата концепция, въведена в поредицата от игрите Age of Empires. Идеята беше доста про...
Как да инсталирате и играете Doom на Linux
Въведение в Doom Серията Doom възниква през 90-те години след пускането на оригиналния Doom. Това беше незабавен хит и от този момент нататък серията ...