Ich habe diesen Code:Virtuelle Funktionen überschreiben und versteckt
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);
Wenn ich den Code dies zu ändern:
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);
ich gelesen, dass dies mit der Funktion überwiegendes verbunden ist und sich versteckt, aber immer noch doesn‘ Ich verstehe das Verhalten in diesem Code.
Viele Dinge sind falsch mit dem Code. Für den Anfang sollten die Funktionsargumente * Referenzen * sein. –
Warum Referenzen? – user152508
Wegen (a) Schneiden und (b) einer unnötigen Kopie. – ipc