Honestly, if you're asking this question then you're not ready to write an engine. Don't worry about engines; write games. Once you get a few under your belt you'll begin to see parts that can be reused, bits that could be reused if they were coded a bit more generically, etc. Essentially your engine will grow and evolve over time from these bits. Without doing this you simply lack necessary experience to know how to approach things and what to avoid.
Thanks for the reply. I am learning C++ at the moment, do you suggest I make games in this language?
I appreciate you taking the time to reply, I realize that I often thing bigger than realistic. I'll make a some small games (THAT FUNCTION!). Thanks.