Question, could you use virtual methods for different parts of a weapon? If you created your own building weapon function that took in virtual(stock, barrel, clip) could you not construct something generic like a “gun” but make a bunch of interchangeable meshes/stats?
Also a typical virtual case I can see is Speed and Velocity of cars. Each car would have different functionality for how it drives, but they are using the same logic.