Condividi tramite


Avviso C26435

La funzione virtuale 'symbol' deve specificare esattamente uno dei valori 'virtual', 'override' o 'final' (c.128)

Linee guida di base di C++

C.128: Le funzioni virtuali devono specificare esattamente uno dei valori virtuali, di override o finali

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

Vedi anche

C.128: Le funzioni virtuali devono specificare esattamente uno dei valori virtuali, di override o finali