Предупреждение C26435
Виртуальная функция "symbol" должна указывать именно одну из "virtual", "override" или "final" (c.128)
C++ Core Guidelines
Чтобы повысить удобочитаемость, необходимо четко указать тип виртуального поведения и без необходимости избыточности. Несмотря на то, что одновременно можно использовать несколько виртуальных описателей, лучше указать один раз, чтобы подчеркнуть наиболее важный аспект виртуального поведения. Ниже приведен порядок важности:
- обычная виртуальная функция;
- виртуальная функция, которая явно переопределяет ее базу;
- виртуальная функция, переопределяет ее базу и предоставляет окончательную реализацию в текущей цепочке наследования.
Примечания.
- Это правило пропускает деструкторы, так как они имеют специальные правила относительно виртуальности.
- Предупреждения отображаются в определениях функций, а не объявлениях. Это может быть запутано, так как определения не имеют виртуальных описателей, но предупреждение по-прежнему подходит.
Имя анализа кода: SINGLE_VIRTUAL_SPECIFICATION
Пример: избыточный описатель
class Ellipse : public Shape {
public:
void Draw() override {
//...
}
};
class Circle : public Ellipse {
public:
void Draw() override final { // C26435, only 'final' is necessary.
//...
}
virtual void DrawCircumference() final { // C26435, should be neither 'virtual' nor 'final'.
//...
}
};