Udostępnij za pośrednictwem


Ostrzeżenie C26433

Funkcja powinna być oznaczona za pomocą polecenia override

Podstawowe wytyczne dotyczące języka C++

C.128: Funkcje wirtualne powinny określać dokładnie jedną z wirtualnych, przesłonięć lub finalnych

Kompilator nie musi wyraźnie stwierdzić, że funkcja wirtualna zastępuje jego bazę. Nieokreślinie override może powodować subtelne problemy podczas konserwacji, jeśli specyfikacja wirtualna kiedykolwiek zmieni się w hierarchii klas. Obniża również czytelność i sprawia, że działanie polimorficzne interfejsu jest mniej oczywiste. Jeśli funkcja jest wyraźnie oznaczona jako override, kompilator może sprawdzić spójność interfejsu i pomóc wykryć problemy przed ich manifestem w czasie wykonywania.

Uwagi

Ta reguła nie ma zastosowania do destruktorów. Destruktory mają własne specyfiki wirtualizacji.

Reguła nie flaguje funkcji jawnie oznaczonych jako final, co jest samą specjalną odmianą specyfikatora wirtualnego.

Ostrzeżenia są wyświetlane w definicjach funkcji, a nie w deklaracjach. Może to być mylące, ponieważ definicje nie mają specyfikatorów wirtualnych, ale ostrzeżenie jest nadal poprawne.

Nazwa analizy kodu: OVERRIDE_EXPLICITLY

Przykład: niejawne zastępowanie

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

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

Zobacz też

C.128: Funkcje wirtualne powinny określać dokładnie jedną z wirtualnych, przesłonięć lub finalnych