Not exactly (meaning your first code snippet, the other two can make sense if you don't want enemies and stored objects to be part of the normal event loop). The event dispatching should be mostly automatic, the most simple form looking approximately like this:
1 2 3
|
foreach(event,pendingEvents)
foreach(obj,objects)
obj->handleEvent(event);
|
Each object only handles the events it cares for and ignores the others (alternatively: it must register itself as a listener for a specific event type before it receives any event notifications).
If it makes sense in your project, handleEvent can then pass the events to virtual functions à la onKeyDown etc., which you then override in derived classes. With the introduction of std::function and lambda functions in C++11, function pointers have become a viable alternative to inheritance.
Generally speaking, what you want here is an application of the observer pattern. Searching for that keyword should return a lot of hits.
Edit: on second thought, if it's just a small project, maybe you don't need a full widget and event system.
As long as the various parts of your logic are kept in separate functions, this should already help a great deal in achieving a clear code structure.