Best way to incorporate upgrades
Hello I have been working on a game for the past two weeks called "Revolting aginst a super power". It's a game that takes place in space, and you are basically a missionary trying to get planets and civilizations to revolt agains the corrupt, evil govt. So far I have the basic spaceship physics complete (it tilts sideways when moving side to side, tilts forward when moving up and down, I have some special features i.e spheres that hover around it). Now I am designing how the upgrades will work. There will be ship and weapons upgrades that the player will encounter throughout the game. Here is where it may get tricky. I could have an enumerated constant describing all of the weapons as members of the spaceship class, and depending what weapons are currently available decides what is actually drawn. OR I could have a weapon class as an abstract data type and each new weapon inherits all of the weapon features plus ones peculiar to its type (for example a homing missles and machine guns). Whenever an upgrade is acquired a new weapon object is created and the previous obsolete weapon objects are deleted.
I hope I have made my point clear. I would like suggestions to what i have said or original suggestions that may help with my problem.