Duplicar posibles:
How to force child same virtual function call its parent virtual function firstCómo llamar a métodos anulado en todas las clases derivadas
Tengo una jerarquía de clases, donde cada clase derivada se impone a una función virtual dado y comienza su ejecución llamando el que está en su clase de padres. El objetivo es que cada una de las implementaciones derivadas se ejecute, pero no me gusta la forma en que lo hago.
Por ejemplo, tengo esta clase:
class base
{
public:
void do_stuff() { do_something(); }
virtual void do_something() { }
};
Entonces se derivan de esta clase en varios niveles:
class derived_10:
public derived_9 // which inherit from derived_8 and so on until derived_0
// which inherit from base
{
public:
virtual void do_something()
{
// this will also call derived_8::do_something() and so on
// until base::do_something()
derived_9::do_something();
// then, some stuff
}
};
Busco una solución que se asegurará de que todos derived_x: : do_something() se invocará en secuencia cuando se llame a base :: do_stuff(), sin tener que esperar que las clases derivadas lo hagan ellos mismos. ¿Tiene una idea de la mejor manera de obtener este comportamiento?
¿Por qué su jerarquía de herencia es tan profunda? – Cameron
Lástima que esta pregunta se cerró como un duplicado. Estaba a punto de publicar una respuesta a esto. Este comentario tendrá que hacer. ¿Qué tal algo como [esto] (http://codepad.org/MtRoQ6Bg)? – greatwolf
@cameron, la jerarquía describe objetos del juego como word_item <- renderable_item <- character <- monster <- jugable_character <- hero. No tiene una profundidad de 10 clases, pero sigue siendo bastante grande. – Julien