Tengo una clase base con una función virtual y quiero anular esa función en una clase derivada. ¿Hay alguna forma de hacer que el compilador verifique si la función que declaré en la clase derivada en realidad anula una función en la clase base? Me gustaría agregar alguna macro o algo que asegure que no declare accidentalmente una nueva función, en lugar de anular la anterior.
Toma este ejemplo:
class parent {
public:
virtual void handle_event(int something) const {
// boring default code
}
};
class child : public parent {
public:
virtual void handle_event(int something) {
// new exciting code
}
};
int main() {
parent *p = new child();
p->handle_event(1);
}
Aquí parent::handle_event()
se llama en lugar de child::handle_event()
, porque el método del niño pierde la const
declaración y, por lo tanto, declara un nuevo método. Esto también podría ser un error tipográfico en el nombre de la función o una pequeña diferencia en los tipos de parámetros. También puede suceder fácilmente si la interfaz de la clase base cambia y en algún lugar no se actualizó alguna clase derivada para reflejar el cambio.
¿Hay alguna forma de evitar este problema? ¿Puedo decirle al compilador o alguna otra herramienta que verifique esto por mí? ¿Algún indicador de compilador útil (preferiblemente para g ++)? ¿Cómo evitas estos problemas?