Sobes.tech
Junior

Cos'è l'override in C++?

sobes.tech AI

Risposta dell'AI

L'override è un meccanismo nella programmazione orientata agli oggetti, in cui una classe derivata fornisce la propria implementazione specifica di una funzione virtuale dichiarata nella classe base. Quando tale funzione viene chiamata tramite un puntatore o riferimento alla classe base, viene eseguita l'implementazione del tipo reale dell'oggetto (derivato o base), a seconda che la funzione sia stata sovrascritta.

Punti chiave:

  • Si applica solo alle funzioni virtuali.
  • La firma (nome, tipo di ritorno, tipi e numero di parametri) della funzione che sovrascrive nella classe derivata deve corrispondere esattamente alla firma della funzione sovrascritta nella classe base.
  • La parola chiave override (a partire da C++11) viene usata per indicare esplicitamente l'intenzione di sovrascrivere una funzione. Il compilatore verificherà se la funzione della classe base esiste effettivamente con questa firma e genererà un errore se non esiste. Questo aiuta a evitare errori di battitura e rende il codice più leggibile.

Esempio:

class Base {
public:
    virtual void print() {
        // Implementazione della classe base
        // ...
    }

    virtual void display(int x) const {
        // Un'altra funzione virtuale
        // ...
    }
};

class Derived : public Base {
public:
    // Sovrascrittura della funzione print di Base
    void print() override {
        // Implementazione specifica per Derived
        // ...
    }

    // Questo non è un override, poiché manca const
    /*
    void display(int x) {
        // Errore di compilazione con override
        // ...
    }
    */

    // Corretta sovrascrittura della funzione display di Base
    void display(int x) const override {
        // Implementazione specifica per Derived
        // ...
    }
};