With polymorphism you can have it set up like that, you have to hold the pointer to the objects. if you need to use functionality which is present higher in the inheritance of the true object then you have to use a dynamic_cast
Also having connections with other developers/people, maybe around your age or from a community. People may not say it's as important, but being able to share idea's and experiences will help you if you're having a difficult time for what ever reason. Nothing sells or get's played if no-one knows about it.
Obviously this kind of thing comes after you have the ability, but all the comments above are about that.
Yeah, I've completely stripped all custom headers in the stdafx at first I though of making a Include.h for the includes, but that was just the same thing Obvious -facepalm-
So I've made sure all classes only call what they need and focused on reducing the reliance each class has on each other. practically to nill.
Moral of the story, be smart with your includes to avoid unneeded includes and loops. (It compiles )