Поделиться через


Предупреждение C26433

Функция должна быть помечена как override

C++ Core Guidelines

C.128. Виртуальные функции должны указывать именно одну из виртуальных, переопределения или окончательных

Компилятору не требуется четко определить, что виртуальная функция переопределяет ее базу. Если виртуальная спецификация override когда-либо изменяется в иерархии классов, может привести к незначительным проблемам во время обслуживания. Он также снижает удобочитаемость и делает полиморфное поведение интерфейса менее очевидным. Если функция четко помечена как override, компилятор может проверить согласованность интерфейса и выявить проблемы, прежде чем они манифестируются во время выполнения.

Примечания.

Это правило не применимо к деструкторам. Деструкторы имеют собственные особенности виртуальности.

Правило не помечает функции явным образом, как finalи само по себе специальное разнообразие виртуального описателя.

Предупреждения отображаются в определениях функций, а не объявлениях. Это может быть запутано, так как определения не имеют виртуальных описателей, но предупреждение по-прежнему правильно.

Имя анализа кода: OVERRIDE_EXPLICITLY

Пример: неявное переопределение

class Shape {
public:
    virtual void Draw() = 0;
    // ...
};

class Ellipse : public Shape {
public:
    void Draw() { // C26433
        //...
    }
};

См. также

C.128. Виртуальные функции должны указывать именно одну из виртуальных, переопределения или окончательных