Me merezco unos capones por lerdo y tormo. Resulta que
el código funciona perfectamente tal como está. ¿Cuál era el problema, entonces? Pues que a la hora de crear el objeto lo creaba de la clase base en lugar de la derivada, y por supuesto que llamaba a los métodos de la clase base...
Espero que después de este error estúpido me permitan continuar participando en el foro.