Mi sono sempre chiesto perché codifichiamo
virtual void MyFunction() = 0;
e non
pure virtual void MyFunction();
C'è un riferimento per la base di questa decisione?
Mi sono sempre chiesto perché codifichiamo
virtual void MyFunction() = 0;
e non
pure virtual void MyFunction();
C'è un riferimento per la base di questa decisione?
Risposte:
Da The Design and Evolution of C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - capitolo 13.2.3:
La curiosa
= 0sintassi è stata scelta rispetto all'ovvia alternativa dell'introduzione di una nuova parola chiavepureoabstractperché al momento non vedevo alcuna possibilità di ottenere una nuova parola chiave accettata. Se avessi suggeritopure, la versione 2.0 sarebbe stata spedita senza classi astratte. Con una scelta tra una sintassi migliore e le classi astratte, ho scelto le classi astratte. Piuttosto che rischiare il ritardo e incorrere in alcuni scontripure, ho usato la tradizionale convenzione C e C ++ di usare 0 per rappresentare non lì .
Comunque, guardare lo standard C ++ (§ 9.2 - Membri della classe) = 0è chiamato puro-specificatore .
pureuna parola chiave contestuale che hai inserito alla fine della definizione di una funzione, quindi al virtual void MyFunction() pureposto di = 0, andare insieme a finale override.