Подтвердить что ты не робот

Виртуальная функция, объявленная не виртуальной в производном классе

Если функция объявлена ​​не виртуальной в производном классе, когда функция базового класса была virutal, почему она вызывает обращение vtable при вызове функции на ее указателе? Функция понятна из области действия.

4b9b3361

Ответ 1

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

В целях документации, однако, на мой взгляд, приятно повторить это.

Ответ 2

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

Ответ 3

Функция по-прежнему виртуальна (при условии, что она имеет одинаковую или ковариантную подпись). Использование virtual при переопределении является избыточным.

Ответ 4

Виртуальные методы, созданные для влияния на производный класс (если вы помечаете метод как виртуальный, он будет использовать vtable для производных классов). И переопределенные методы будут виртуальными.

Ответ 5

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