Поведение виртуальной функции в производном классе от базового класса и абстрактного класса

Опубликовано: 14 Сентября, 2022

В этой статье мы обсудим поведение виртуальной функции в производном классе и производном классе от абстрактного базового класса в C++.

Рассмотрим следующую программу:

Объяснение: Когда объявлен указатель базового класса , указывающий на объект производного класса , тогда объявляйте функцию как виртуальную только в базовом классе, когда необходимо переопределить ее в производном классе. Если функция объявлена как виртуальная в базовом классе, то не рекомендуется переопределять ее в производном классе, он все равно вызовет виртуальную функцию и выполнит ее.

Ключевое слово virtual работает только при переходе к полиморфизму времени выполнения и переопределении функции базового класса в производном классе. Если используется виртуальное ключевое слово и не рекомендуется переопределять эту функцию в производном классе, то виртуальное ключевое слово бесполезно. Это свойство не относится к абстрактному базовому классу, поскольку в базовом классе также нет тела функции. Ниже приведена программа, иллюстрирующая то же самое:

Программа 1:

Программа 2:

C++




// C++ program to illustrate the concept
// of virtual function
  
#include <bits/stdc++.h>
using namespace std;
  
// Base Class
class Base {
public:
    // Virtual Function
    virtual void print() = 0;
};
  
// Derived Class
class Derived : public Base {
};
  
// Driver Code
int main()
{
  
    // Object of the derived class
    Base* b2 = new Derived();
  
    // Function Call to Base Class
    b2->print();
  
    return 0;
}

Выход:

Объяснение: Если сравнить две приведенные выше программы, когда функция абстрактного класса переопределяется, то ключевое слово virtual работает так, как и было задумано. Но в приведенной выше программе функция не была переопределена внутри базового класса, а также функция не была определена в базовом классе, что привело к ошибке компиляции.

C++