mam ten kod:wirtualne funkcje nadrzędne i ukrywanie
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);
Gdybym zmienić kod do tego:
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);
Czytałem, że jest to związane z funkcji legionella i ukrywanie ale nadal robi” t zrozumieć zachowanie w tym kodzie.
Wiele rzeczy jest nie tak z kodem. Na początek argumenty funkcji powinny być * referencjami *. –
Dlaczego referencje? – user152508
Z powodu (a) krojenia i (b) niepotrzebnej kopii. – ipc