Avviso C26435
La funzione virtuale 'symbol' deve specificare esattamente uno dei valori 'virtual', 'override' o 'final' (c.128)
Linee guida di base di C++
Per migliorare la leggibilità, il tipo di comportamento virtuale deve essere indicato chiaramente e senza ridondanza non necessaria. Anche se più identificatori virtuali possono essere usati contemporaneamente, è preferibile specificarne uno alla volta per evidenziare l'aspetto più importante del comportamento virtuale. L'ordine di importanza seguente è evidente:
- funzione virtuale normale;
- funzione virtuale che esegue in modo esplicito l'override della base;
- funzione virtuale che esegue l'override della base e fornisce l'implementazione finale nella catena di ereditarietà corrente.
Note
- Questa regola ignora i distruttori perché dispongono di regole speciali relative alla virtualità.
- Gli avvisi sono visualizzati nelle definizioni di funzione, non nelle dichiarazioni. Può generare confusione, poiché le definizioni non hanno identificatori virtuali, ma l'avviso è ancora appropriato.
Nome dell'analisi del codice: SINGLE_VIRTUAL_SPECIFICATION
Esempio: Identificatore ridondante
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'.
//...
}
};