Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Виртуальные функции С++

Виртуальные функции C++

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

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

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

Например, рассмотрим код ниже:

01

Позже, если мы создадим указатель 06 введите, чтобы указать на объект 19 class и вызовите 25 функция, она вызывает функцию 39 функция 46 класс.

Другими словами, функция-член 57 не переопределяется.

10 

Чтобы этого избежать, мы объявляем 62 функция 79 класс как виртуальный с помощью 89 ключевое слово.

28

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

<час>

Пример 1:виртуальная функция C++

32

Вывод

40

Здесь мы объявили 98 функция 101 как 111 .

Таким образом, эта функция переопределяется, даже когда мы используем указатель 125. тип, который указывает на 139 объект производный1 .

<рисунок> <час>

Идентификатор переопределения C++

C++ 11 дал нам новый идентификатор 144 это очень полезно, чтобы избежать ошибок при использовании виртуальных функций.

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

Например,

58

Если мы используем прототип функции в 155 class и определить эту функцию вне класса, то мы используем следующий код:

61
<час>

Использование переопределения C++

При использовании виртуальных функций возможны ошибки при объявлении функций-членов производных классов.

Использование 164 идентификатор предлагает компилятору отображать сообщения об ошибках, когда эти ошибки сделаны.

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

Некоторые из этих возможных ошибок:

  • Функции с неверными именами: Например, если виртуальная функция в базовом классе называется 177 , но мы случайно назвали переопределяющую функцию в производном классе как 187 .
  • Функции с разными типами возврата: Если виртуальная функция, скажем, 190 тип, но функция в производном классе имеет тип 204 тип.
  • Функции с разными параметрами: Если параметры виртуальной функции и функций в производных классах не совпадают.
  • В базовом классе не объявлена ​​виртуальная функция.
<час>

Использование виртуальных функций C++

Предположим, у нас есть базовый класс 215 и производные классы 226 и 238 .

Предположим, что у каждого класса есть элемент данных с именем type. . Предположим, что эти переменные инициализированы через соответствующие конструкторы.

73

Теперь предположим, что наша программа требует от нас создания двух 247 функции для каждого класса:

  1. 253 чтобы вернуть значение type
  2. 266 чтобы напечатать значение type

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

Или мы могли бы сделать 270 виртуальный в 283 класс, затем создайте один отдельный 297 функция, которая принимает указатель 306 введите в качестве аргумента. Затем мы можем использовать эту единственную функцию для переопределения виртуальной функции.

89

Это сделает код короче. , очиститель и менее повторяющиеся .

<час>

Пример 2:Демонстрация виртуальной функции C++

99

Вывод

107

Здесь мы использовали виртуальную функцию 314 и 320 указатель ani во избежание повторения 332 функция в каждом классе.

114

В 342 , мы создали 3 352 указатели для динамического создания объектов 363 , 370 и 388 классы.

129

Затем мы вызываем 390 используйте эти указатели:

  1. Когда 406 вызывается, указатель указывает на 418 объект. Итак, виртуальная функция в 428 класс выполняется внутри 431 .
  2. Когда 442 вызывается, указатель указывает на 452 объект. Таким образом, виртуальная функция переопределяется, а функция 461 выполняется внутри 475 .
  3. Когда 488 вызывается, указатель указывает на 497 объект. Таким образом, виртуальная функция переопределяется, а функция 504 выполняется внутри 510 .

Язык C

  1. Передача массива в функцию в программировании на C++
  2. Классы и объекты С++
  3. Дружественные функции C++ и дружественные классы
  4. Шаблоны классов С++
  5. Функции C++ с примерами программ
  6. Верилог-функции
  7. С - Функции
  8. Классы хранения в C++
  9. Перегрузка C++ (оператор и функция)
  10. Полиморфизм в С++