Когда метод объявляется как virtual
в классе, его переопределения в производных классах автоматически рассматриваются как virtual
, а язык С++ делает это ключевое слово virtual
необязательным в этом случае:
class Base {
virtual void f();
};
class Derived : public Base {
void f(); // 'virtual' is optional but implied.
};
Мой вопрос: что является основанием для того, чтобы сделать virtual
необязательным?
Я знаю, что компилятору не обязательно говорить об этом, но я думаю, что разработчики выиграют, если бы такое ограничение было принудительно применено компилятором.
Например, иногда, когда я читаю код других, мне интересно, является ли метод виртуальным, и я должен отслеживать его суперклассы, чтобы определить это. И некоторые стандарты кодирования (Google) делают его обязательным для размещения ключевого слова virtual
во всех подклассах.