Its hard to think of a realistic example right now, as we have pretty much removed all purpose from the Ship-class to the WorldObject. Just to make clear what I mean: Imagine there is a virtual Ship::controlInaccuracy() that gives error to boardcomputer input. in any normal ship this will be a hard value, of say, 0.1. But there might be endbosses or capitalships that have more inaccuracy once they were hit once. Okay, this is probably something that will not happen ;)
But we have Generic* for everything (Gun, Engine, Bullet, ....) that is loaded from properties that's why I'd stick with this rather pointless GenericShip as well since the otherway round will most likely confuse a later reader of the code ("Generic* everywhere but not for Ship? Why? I'll have to read more code to figure it out...") and you could easily put some debug output into the constructor to monitor script-controlled creation of ships, e.g.