Вам не нужно добавлять virtual
к функции, уже объявленной виртуальной в родительском классе.Спецификатор virtual
указывает, что нестатическая функция-член является виртуальной и поддерживает динамическую диспетчеризацию.Он может появиться только в decl-specifier-seq
первоначального объявления нестатической функции-члена (т. Е. Когда оно объявлено в определении класса).
Что такое виртуальная функция
Виртуальная функция - это функция-член, которая объявлена в базовом классе и переопределена (переопределена) производным классом.Когда вы ссылаетесь на объект производного класса, используя указатель или ссылку на базовый класс, вы можете вызвать виртуальную функцию для этого объекта и выполнить версию функции производного класса.
Работа виртуальногофункции (концепция VTABLE и VPTR)
Если класс содержит виртуальную функцию, то компилятор сам делает две вещи:
- Если объект этого класса создан, то виртуальныйуказатель (VPTR) вставляется как член данных класса для указания на VTABLE этого класса.Для каждого нового созданного объекта новый виртуальный указатель вставляется в качестве члена данных этого класса.
- Независимо от того, создан объект или нет, статический массив указателя на функцию VTABLE, где каждая ячейка содержит адрес каждоговиртуальная функция, содержащаяся в этом классе.
Подробная информация о виртуальных функциях уже содержит множество хороших ответов Как реализованы виртуальные функции и vtable?