que tienen este código:funciones virtuales de primer orden y se esconden
class Event{};
class CustomEvent:public Event{};
class Handler
{
public:
virtual void inform(Event e){}
};
class CustomHandler : public Handler
{
public:
void inform(CustomEvent e){}
};
CustomEvent cEvent;
Handler* handler = new CustomHandler;
//this calls Handler::inform(Event), not CustomHandler::(CustomEvent) , as I expected
handler->inform(cEvent);
Si cambio el código para esto:
class Handler
{
public:
virtual void inform(Event e){}
virtual void inform(CustomEvent e){}
};
class CustomHandler : public Handler
{
public:
void inform(CustomEvent e){}
};
CustomEvent cEvent;
Handler* handler = new CustomHandler;
//this calls CustomHandler::(CustomEvent)
handler->inform(cEvent);
leí que esto está relacionado con la primordial función y escondido, pero todavía doesn' Entiendo el comportamiento en este código.
Muchas cosas están mal con el código. Para empezar, los argumentos de la función deberían ser * referencias *. –
¿Por qué referencias? – user152508
debido a (a) rebanar y (b) una copia innecesaria. – ipc