Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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