ho questo codice:funzioni virtuali imperativi e nascondere
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);
Se cambio il codice a questo:
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);
ho letto che questo sia collegato con la funzione preponderante e nascondere, ma ancora doesn' t comprendere il comportamento in questo codice.
Molte cose sono errate con il codice. Per i principianti, gli argomenti della funzione dovrebbero essere * riferimenti *. –
Perché i riferimenti? – user152508
A causa di (a) slicing e (b) una copia non necessaria. – ipc