in reply to OOP - redefining a class

First of all, you probably mean :: and not : there as the class divider.

As to your problem... I think you should read about some design patterns to get a general idea of where you are and where you want to get. "Factories", in particular.