Введение в виртуальное ключевое слово в C ++

Виртуальное ключевое слово в C ++ используется для создания виртуальной функции в C ++. Виртуальная функция - это функция родительского класса, которую мы хотим переопределить в дочернем классе. Виртуальная функция объявляется с использованием ключевого слова virtual. Когда мы определяем виртуальную функцию, ключевое слово virtual должно выполняться в объявлении функции. Ключевое слово virtual указывает компилятору выполнить позднее или динамическое связывание функции.

Один указатель необходим для ссылки на все объекты разных классов. Поэтому указатель создается на суперклассе для ссылки на все объекты производного класса, а затем указатель суперкласса содержит адрес объекта производного класса, всегда выполняющего функцию суперкласса. Итак, для решения этой проблемы мы используем виртуальную функцию. Таким образом, когда виртуальная функция создается в суперклассе, компилятор C ++ определяет, какая функция должна быть выполнена во время выполнения, и идентификация функции выполняется на основе типа объекта, на который указывает указатель суперкласса.

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

Виртуальные функции синтаксиса приведены ниже:

Синтаксис

class name_class
(
public :
virtual return fun(arg1, arg2, ..)
(
//code inside the function
)
)

Как и в синтаксисе, fun () объявляется с помощью ключевого слова virtual, что означает, что дочерний класс может переопределять те же методы.

Программа 1:

#include
using namespace std;
class A
(
public:
void disp()
(
cout << " Message from the class A\n ";
)
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Late Binding Occurs
)

Выход:

В вышеприведенной программе суперкласс A имеет функцию disp (), которая переписывается в производном классе B. В основной функции метод disp () вызывает объект obj1 (который является динамическим или поздним). Динамическое связывание это процесс, в котором выполняется конкретная функция, определяемая во время выполнения) и функция disp () класса A.

Программа 2:

#include
using namespace std;
class A
(
public:
virtual void disp()
(
cout << " Message from the class A \n ";
)
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Выход:

Приведенный выше программный код является изменением программы 1, функция disp () определена с ключевым словом virtual, и теперь, когда obj1 вызывает функцию disp (), функция disp () дочернего класса B выполняется.

Программа 3:

#include
using namespace std;
class A
(
public:
virtual void disp()
(
cout << " Message from the class A\n ";
)
);
class B :public A
(
public:
virtual void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Выход:

Приведенный выше программный код представляет собой изменение программы 2, функции disp (), которая также переопределяется с ключевым словом virtual в классе B, а теперь, когда obj1 вызывает функцию disp (), функцию disp () дочернего класса B выполнен.

Далее мы пишем программу для чисто виртуальной функции. Чистая виртуальная функция - это функция, для которой у Дон не было реализаций. Чистая виртуальная функция также называется абстрактной виртуальной функцией. Объявление чистой виртуальной функции присваивает 0, как показано в приведенном ниже коде -

Программа 4:

#include
using namespace std;
class A
(
public:
virtual void disp()=0;
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Выход:

Преимущества виртуального ключевого слова в C ++

  • Виртуальные функции используются для достижения полиморфизма во время выполнения.
  • Если класс является производным от класса, имеющего виртуальную функцию, то определение функции может быть переопределено в производном классе.

Правила виртуального ключевого слова в C ++

  • Ключевое слово Virtual в C ++ используется в объявлении функции.
  • Виртуальные функции должны быть членами класса.
  • Виртуальная функция доступна через указатели объектов.
  • Виртуальная функция не может быть объявлена ​​как статическая.
  • Виртуальная функция может быть друзьями из другого класса.
  • Если виртуальная функция не используется в суперклассе, мы также можем определить ее в суперклассе.
  • Сигнатура виртуальной функции суперкласса и дочерних классов должна быть одинаковой, так называемой переопределением функции, в противном случае, если две функции с одинаковым именем, но разной сигнатурой, это считается перегруженными функциями в C ++.
  • Мы можем иметь виртуальный деструктор, но не иметь виртуального конструктора.

Вывод

  • Виртуальное ключевое слово в C ++ используется для создания виртуальной функции в C ++.
  • Виртуальная функция - это функция родительского класса, которую мы хотим переопределить в дочернем классе.
  • Один указатель необходим для ссылки на все объекты разных классов.
  • Указатель суперкласса содержит адрес объекта производного класса, всегда запускающего функцию суперкласса.
  • Виртуальные функции должны быть членами класса, должны быть членами класса, не могут быть объявлены как статические, доступ к ним осуществляется через указатели объектов.
  • Сигнатура виртуальной функции суперкласса и дочерних классов должна быть одинаковой, так называемой переопределением функции, в противном случае, если две функции с одинаковым именем, но разной сигнатурой, это считается перегруженными функциями в C ++.

Рекомендуемые статьи

Это руководство по ключевому слову Virtual в C ++. Здесь мы обсуждаем ключевое слово Введение и преимущества Виртуального языка в C ++ вместе с его синтаксисом виртуальной функции. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше -

  1. Переопределение метода в C #
  2. Наследование в C #
  3. Команды C #
  4. Java-команды
  5. Переопределение в Java
  6. Полиморфизм в Яве
  7. Лучшие 11 функций и преимуществ C ++