Tengo una clase base con una función virtual y quiero anular esa función en una clase derivada. ¿Hay alguna manera de hacer que el compilador compruebe si la función que declare en la clase derivada realmente anula una función en la clase base? Me gustaría agregar alguna macro o algo que asegure que no haya declarado accidentalmente una nueva función, en lugar de anular la anterior.Anular de forma segura las funciones virtuales de C++
Tome 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 no alcanza la declaración const
y por lo tanto se declara un nuevo método. Esto también podría ser un error ortográ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 alguna clase derivada no se actualizó para reflejar el cambio.
¿Hay alguna manera de evitar este problema? ¿De alguna manera puedo decirle al compilador o alguna otra herramienta que verifique esto por mí? Cualquier indicador de compilador útil (preferiblemente para g ++)? ¿Cómo se evitan estos problemas?
Gran pregunta, he estado tratando de averiguar por qué mi función de clase niño doesn; t ser llamado desde una hora ahora! –