Виртуальная функция в примере C ++ | Учебник по виртуальным функциям C ++

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

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

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

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

Предположим, базовый класс содержит функцию объявлен как виртуальный, а производный класс определяет ту же функцию. Функция производного класса вызывается для объектов производного класса, даже если она вызывается с использованием указателя или ссылки на базовый класс.

Они в основном используются для достижения полиморфизма среды выполнения. Функции объявляются с помощью ключевого слова virtual в базовом классе. Разрешение вызова функции выполняется во время выполнения.

Если мы хотим объявить виртуальную функцию, используется ключевое слово virtual .

# Концепция невиртуальной функции

Прежде, чем узнать виртуальная функция, мы сначала должны знать, что происходит, когда мы не используем виртуальную функцию. Сначала обратитесь к функции ниже.

 #include  using namespace std;//Bank - это Base Classclass Bank {public://здесь объявляем не виртуальную функцию void display () {cout   display ();  return 0;} 

См. следующий результат.

В приведенном выше примере мы видим, что * ptr — это указатель базового класса. К этому указателю может получить доступ только базовый класс, но не члены членов производного класса.

# Концепция виртуальных функций

Если вы хотите преодолеть описанную выше ситуацию, мы виртуальные функции. Используя виртуальную функцию, мы можем получить доступ к членам производного класса. См. Пример ниже, чтобы понять концепцию.

 #include  using namespace std;//Банк - это банк базового класса {public://объявление виртуальной функции здесь virtual void display () {cout  display ();  return 0;} 

См. следующий результат.

Итак, из приведенного выше примера мы видим, что компилятор определяет тип объекта во время выполнения, а затем вызывает соответствующую функцию.

# Правила виртуальной функции

  1. Эта функция не может быть статической и не может быть дружественной функцией другого класса.
  2. Это должна быть членом какого-либо другого класса.
  3. Доступ к этой функции можно получить через указатели объектов.
  4. Виртуальная функция должна быть объявлена ​​только в базовом классе.
  5. Доступ к этой функции должен осуществляться с помощью указателя или ссылки типа базового класса для достижения полиморфизма времени выполнения.
  6. У нас не может быть виртуального конструктора, но у нас может быть виртуальный деструктор.
  7. Прототип функции этого типа должен быть одинаковым как в базовом, так и в производном классе.

# Концепция Pure Virtual Функция

Виртуальная функция, которая не является u sed для выполнения любой задачи, служит только в качестве заполнителя, называется Pure Virtual Function. Объявление чистой виртуальной функции заканчивается только = 0. См. Следующий код.

 class Student {public: virtual void details () = 0;}; 

Эта функция также называется ничего не делает функция, потому что , хотя она объявлена ​​в базовом классе, у нее нет определения.

В этой функции основная цель базового класса — предоставить черты производным классам и создать базовый указатель, используемый для достижения полиморфизма времени выполнения.

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

Теперь мы увидим один пример чистой виртуальной функции.

См. следующую программу.

 #include  using namespace std;//Объявление базового класса student {public://создание чистой виртуальной функции virtual void details () = 0;};//объявление производного класса Информация о классе: public student {public:  void details () {cout  детали ();  return 0;} 

См. следующий результат.

Итак, в примере мы видим, что в базовом классе student мы объявили одну чистую виртуальную функцию details (), а затем в производном классе мы ее использовали. Итак, здесь мы заканчиваем концепцию виртуальной функции.

Наконец, виртуальная функция в примере C ++ завершена.

Оцените статью
nanomode.ru
Добавить комментарий