Siempre me he preguntado por qué codificamos
virtual void MyFunction() = 0;
y no
pure virtual void MyFunction();
¿Hay alguna referencia para la base de esta decisión?
Siempre me he preguntado por qué codificamos
virtual void MyFunction() = 0;
y no
pure virtual void MyFunction();
¿Hay alguna referencia para la base de esta decisión?
Respuestas:
Del diseño y evolución de C ++ - Bjarne Stroustrup - Addison-Wesley (ISBN 0-201-54330-3) - capítulo 13.2.3:
La
= 0
sintaxis curiosa se eligió sobre la alternativa obvia de introducir una nueva palabra clavepure
oabstract
porque en ese momento no vi ninguna posibilidad de que se aceptara una nueva palabra clave. Si hubiera sugeridopure
, la versión 2.0 se habría enviado sin clases abstractas. Dada la opción entre una sintaxis más agradable y clases abstractas, elegí clases abstractas. En lugar de arriesgarse a demorar e incurrir en ciertas peleaspure
, usé la convención tradicional C y C ++ de usar 0 para representar no allí .
De todos modos, mirar el estándar C ++ (§ 9.2 - Miembros de la clase) = 0
se llama especificador puro .
pure
una palabra clave contextual que coloque al final de una definición de función, de modo que, en virtual void MyFunction() pure
lugar de = 0
, vaya junto con final
y override
.