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
= 0sintaxis curiosa se eligió sobre la alternativa obvia de introducir una nueva palabra clavepureoabstractporque 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) = 0se llama especificador puro .
pureuna palabra clave contextual que coloque al final de una definición de función, de modo que, en virtual void MyFunction() purelugar de = 0, vaya junto con finaly override.