Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

2.3. Виртуальные функции

Лекция



Привет, сегодня поговорим про виртуальные функции, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое виртуальные функции , настоятельно рекомендую прочитать все из категории С++ (C plus plus).

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

Пример 2.3.1

 

Пример 2.3.1

 

class base

 

{

 

public :

 

  void print(){cout<<“\nbase”;}

 

};

 

class dir : public base

 

{

 

public:

 

  void print(){cout<<“\ndir”;}

 

};

 

void main()

 

{

 

  base B,*bp = &B;

 

  dir D,*dp = &D;

 

  base *p = &D;

 

  bp –>print(); // base

 

  dp –>print(); // dir

 

  p –>print(); // base

 

}

 

     В последнем случае вызывается функция  print базового класса, хотя указатель p настроен на объект производного класса. Об этом говорит сайт https://intellect.icu . Дело в том, что выбор нужной функции выполняется при  компиляции программы и определяется типом указателя, а не его значением. Такой режим называется ранним или статическим связыванием.   Большую гибкость обеспечивает позднее (отложенное) или динамическоесвязывание, которое предоставляется механизмом виртуальных функций. Любая нестатическая функция базового класса может быть сделана виртуальной, для чего используется ключевое слово virtual
Пример

class base
{
public:
  virtual void print(){cout<<“\nbase”;}
. . .
};
// и так далее – см. предыдущий пример.
В этом случае будет напечатано
base
dir
dir

     Т.о. интерпретация каждого вызова виртуальной функции через указатель на базовый класс зависит от значения этого указателя, т.е. от типа объекта, для которого  выполняется вызов. виртуальные функции -это функции, объявленные в базовом классе и переопределенные в  производных классах. Иерархия классов, которая определена открытым наследованием, создает родственный набор пользовательских типов, на все объекты которых может указывать указатель базового класса. Выбор того, какую виртуальную функцию вызвать будет зависеть от типа объекта, на  который фактически (в момент выполнения программы) направлен указатель, а не от типа указателя. Виртуальными могут быть только нестатические функции-члены.Виртуальность наследуется. После того как функция определена как виртуальная, ее повторное определение в производном классе (с тем же самым прототипом) создает в этом классе новую виртуальную функцию, причем спецификатор virtual может не использоваться. Конструкторы не могут быть виртуальными, в отличие от деструкторов. Практически каждый класс, имеющий виртуальную функцию, должен иметь виртуальный деструктор.Если в производном классе ввести функцию с тем же именем и типом, но с  другой сигнатурой параметров, то эта функция производного класса не будет виртуальной.Виртуальная функция может быть  дружественной в другом классе.Механизм виртуального вызова может быть подавлен с помощью явного использования полного квалифицированного имени.

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

Из статьи мы узнали кратко, но содержательно про виртуальные функции
создано: 2015-12-20
обновлено: 2021-03-13
132370



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

С++ (C plus plus)

Термины: С++ (C plus plus)