我有這樣的代碼:覆蓋和隱藏虛擬功能
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);
如果我的代碼改成這樣:
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);
我讀了這個與功能重載連接和隱藏,但仍然沒有按」瞭解此代碼中的行爲。
許多事情都是錯誤的代碼。對於初學者來說,函數參數應該是* references *。 – 2012-04-03 10:12:58
爲什麼要引用? – user152508 2012-04-03 10:20:29
由於(a)切片和(b)不必要的副本。 – ipc 2012-04-03 10:22:39