
The other way is to use inheritance. Say you have a base class for your weapons, CWeapon, that every other weapon derives from. Then you can create instances of the new classes using a CWeapon pointer, e.g. CWeapon *gun = new CRailGun. Then you could create a list that stores CWeapon pointers and insert the weapons into that list. You'd have to make certain functions of CWeapon virtual to make sure that the derived classes have things called right, but it should all work out.
Jonathan