Если функция объявлена не виртуальной в производном классе, когда функция базового класса была virutal, почему она вызывает обращение vtable при вызове функции на ее указателе? Функция понятна из области действия.
Виртуальная функция, объявленная не виртуальной в производном классе
Ответ 1
В С++, если вы объявляете метод virtual
в базовом классе, тогда он виртуальный также в производном классе, даже если ключевое слово virtual
опущено.
В целях документации, однако, на мой взгляд, приятно повторить это.
Ответ 2
Вы не можете сделать функцию не виртуальной, поэтому она останется виртуальной, и вызов функции также будет виртуальным. Конечно, есть ситуации, когда компилятор сможет оптимизировать это и выполнить прямой вызов, но не обязательно в вашем сценарии.
Ответ 3
Функция по-прежнему виртуальна (при условии, что она имеет одинаковую или ковариантную подпись). Использование virtual
при переопределении является избыточным.
Ответ 4
Виртуальные методы, созданные для влияния на производный класс (если вы помечаете метод как виртуальный, он будет использовать vtable для производных классов). И переопределенные методы будут виртуальными.
Ответ 5
Когда класс наследует виртуальную функцию, любое новое, переопределяющее объявление этой функции будет автоматически сделано виртуальным, даже если ключевое слово virtual
не используется.