dynamic_cast vs exponer funciones virtuales en la clase padre (C ++)

Tengo una clase base "base" y otra clase "derivada" que se hereda de "base".

"derivado" tiene 1 método cH1.

si hago esto

base* b = new derived();

Y quiero poder hacer esto:

b->cH1();

Obviamente no puedo y hay 2 soluciones:

O bien declare cH1 como virtual puro en base.

o haz esto:

dynamic_cast<derived*>(b)->cH1();

¿Cuál es una mejor práctica?

Respuestas a la pregunta(3)

Su respuesta a la pregunta