假设以下代码:
class Event {
public:
virtual void execute() {
std::cout << "Event executed.";
}
}
class SubEvent : public Event {
void execute() {
std::cout << "SubEvent executed.";
}
}
void executeEvent(Event e) {
e.execute();
}
int main(int argc, char ** argv) {
SubEvent se;
executeEvent(se);
}
Run Code Online (Sandbox Code Playgroud)
执行时,程序输出"Event executed.",但我想执行SubEvent.我怎样才能做到这一点?
您正在传递Eventby值.该函数获取自己的参数副本,这是一个Event对象,而不是SubEvent.您可以通过传递引用来解决此问题:
void executeEvent(Event& e)
{// ^
e.execute();
}
Run Code Online (Sandbox Code Playgroud)
这称为对象切片.它相当于:
SubEvent se;
Event e{se};
e.execute();
Run Code Online (Sandbox Code Playgroud)