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