Udostępnij przez


Ostrzeżenie C26435

Funkcja wirtualna "symbol" powinna określać dokładnie jedną z wartości "virtual", "override" lub "final" (c.128)

podstawowe wytyczne dotyczące języka C++

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

Aby zwiększyć czytelność, rodzaj zachowania wirtualnego powinien być wyraźnie określony i bez niepotrzebnej nadmiarowości. Mimo że wiele specyfikatorów wirtualnych może być używanych jednocześnie, lepiej jest określić jeden naraz, aby podkreślić najważniejszy aspekt zachowania wirtualnego. Następująca kolejność ważności jest widoczna:

  • zwykła funkcja wirtualna;
  • funkcja wirtualna, która jawnie zastępuje swoją bazę;
  • funkcja wirtualna, która zastępuje swoją bazę i zapewnia ostateczną implementację w bieżącym łańcuchu dziedziczenia.

Uwagi

  • Ta reguła pomija destruktory, ponieważ mają specjalne reguły dotyczące wirtualizacji.
  • 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 odpowiednie.

Nazwa analizy kodu: SINGLE_VIRTUAL_SPECIFICATION

Przykład: specyfikator nadmiarowy

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'.
        //...
    }
};

Zobacz też

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