Технически не нужно писать virtual
.
Практически это документирует, что функция virtual
: это означает, что при наследовании мне не нужно проверять весь путь до базового класса, чтобы увидеть, действительно ли это virtual
функция. Это также подчеркивает обычные предостережения: то есть вызов конструктора или деструктора на ваш страх и риск.
В C ++ 11 есть лучшая альтернатива документу "унаследованная виртуальность", ключевое слово override
.
class Base { public: virtual void method() = 0; };
class Derived: public Base { public: void method() override; };
Ключевое слово override
означает, что сообщение должно переопределить метод базового класса (здесь базовый является транзитивным). Если метод базового класса не переопределен, код ошибочен, и компилятор выдаст ошибку.
Следовательно, наличие override
фактически делает разницу между base методом (сначала определяющим новый виртуальный метод в классе) и переопределяющим методом. И это статически проверяется компилятором.