Wikipedia citazione:
L'override identificatore speciale significa che il compilatore controllerà la classe di base (es) per vedere se c'è una funzione virtuale con questa firma esatta. E se non c'è, il compilatore salterà fuori.
http://en.wikipedia.org/wiki/C%2B%2B11#Explicit_overrides_and_final
Edit (il tentativo di migliorare un po 'la risposta):
Dichiarare un metodo come "override" si intende che tale metodo è destinato a riscrivere un metodo (virtuale) sulla classe base. Il metodo di override deve avere la stessa firma (almeno per i parametri di input) come metodo che intende riscrivere.
Perché è necessario? Bene, i seguenti due casi di errore comuni sono impediti:
un errore di digitazione un tipo nel nuovo metodo. Il compilatore, ignaro del fatto che intende scrivere un metodo precedente, lo aggiunge semplicemente alla classe come nuovo metodo. Il problema è che il vecchio metodo è ancora lì, il nuovo è aggiunto proprio come un sovraccarico. In questo caso, tutte le chiamate verso il vecchio metodo funzioneranno come prima, senza alcun cambiamento nel comportamento (che sarebbe stato lo scopo della riscrittura).
uno si dimentica di dichiarare il metodo nella superclasse come "virtuale", ma tenta comunque di riscriverlo in una sottoclasse. Sebbene questo sia apparentemente accettato, il comportamento non sarà esattamente come previsto: il metodo non è virtuale, quindi l'accesso attraverso i puntatori verso la superclasse terminerà chiamando il vecchio metodo (superclasse ') invece del nuovo metodo (sottoclasse').
Aggiunta di "override" disambigua chiaramente questo: attraverso questa, si sta dicendo al compilatore che tre cose si aspettano:
- c'è un metodo con lo stesso nome della superclasse
- questo il metodo nella superclasse è dichiarato come "virtuale" (che significa, riscritto)
- il metodo nella superclasse ha la stessa firma (input *) del metodo nella sottoclasse (il metodo di riscrittura)
Se uno di questi è falso, viene segnalato un errore.
* nota: il parametro di uscita è talvolta di tipo diverso ma correlato. Leggi le trasformazioni covarianti e controvarianti se interessati.
Sì. –
Non è un doppio controllo. È l'unico controllo. –
@Nikos buon punto;), corretto – aiao