Виртуальная функция - это функция-член, которая определена в базовом / родительском классе и повторно определена в производном классе. Виртуальная функция позволяет вызывать версию функции производного класса, используя ссылку или указатель на базовый класс.
Давайте посмотрим на несколько примеров, чтобы понять концепцию виртуальной функции.
В первом примере мы увидим поведение невиртуальной функции, а затем во втором примере мы объясним поведение виртуальной функции.
Пример 1
В следующем примере кода у нас есть два класса: базовый класс и производный класс.
Базовый класс имеет функцию-член i.е., отображать(). Производный класс унаследован от базового класса и переопределил функцию display ().
Затем мы объявили указатель на тип базового класса и назначили объект производного класса. Итак, когда мы вызываем функцию display () с использованием указателя типа базового класса, будет вызываться функция базового класса. Вы можете увидеть результат ниже.
Но в таких случаях C ++ предоставляет способ вызова функции производного класса, объявляя функцию базового класса как виртуальную. Мы увидим еще один пример, чтобы понять это.
#включатьиспользуя пространство имен std;
класс Base_Class
общественность:
пустой дисплей ()
cout << "I am in Base class" << endl;
;
класс Derived_Class: общедоступный Base_Class
общественность:
пустой дисплей ()
cout << "I am in Derived class"
Пример 2
В этом примере мы определили функцию display () как виртуальную функцию в базовом классе. Единственное отличие от предыдущей программы в том, что мы добавили ключевое слово virtual перед «void display ()» в базовом классе.
Теперь, если вы видите результат, он печатает: «Я в производном классе», что указывает на то, что вызывается функция производного класса.
Ключевое слово virtual (виртуальная функция) в базовом классе отвечает за то, чтобы для объекта вызывалась правильная функция.
#включатьиспользуя пространство имен std;
класс Base_Class
общественность:
виртуальный пустой дисплей ()
cout << "I am in Base class" << endl;
;
класс Derived_Class: общедоступный Base_Class
общественность:
пустой дисплей ()
cout << "I am in Derived class"
Пример 3
Это еще один пример виртуальной функции. Как вы можете видеть в приведенной ниже программе, мы определили базовый класс i.е., Животное. Есть два производных класса: Dog и Cow. Мы определили функцию eat () как виртуальную в базовом классе, i.е., Животное. Затем мы переопределили функцию eat () в обоих производных классах Dog и Cow. В функции main () у нас есть указатель на базовый класс i.е., Animal, а затем прикрепил производный класс Dog. Итак, когда мы вызываем функцию eat () с помощью указателя базового класса, мы можем вызвать версию производного класса функции eat (), i.е., функция eat () из класса Dog. Точно так же, когда мы присоединяем объект класса Cow, мы можем затем вызвать версию производного класса функции eat (), i.е., функция eat () из класса Cow. Вы можете ясно увидеть это поведение в выводе ниже.
#включатьиспользуя пространство имен std;
класс Animal
общественность:
виртуальная пустота есть ()
cout << "Animal - base class - undefined eating behavior." << endl;
;
класс Dog: public Animal
общественность:
пусто есть ()
cout << "Dog - eat non-veg!" << endl;
;
класс Cow: public Animal
общественность:
пусто есть ()
cout << "Cow - eat veg!"
a_ptr-> есть ();
возврат 0;
Заключение
В этой статье я объяснил концепцию виртуальной функции в C++. C ++ поддерживает различные типы полиморфизма - статический полиморфизм и динамический полиморфизм. С помощью виртуальной функции мы можем добиться полиморфизма времени выполнения / динамического. В этой статье мы рассмотрели только концепцию виртуальной функции и способы достижения полиморфизма времени выполнения. Я объяснил три рабочих примера, чтобы объяснить виртуальную функцию.