Is it possible to get virtual functions to work like I'm thinking?
No. When you call one from a constructor, it's dispatched according to the class being initialised (Body
in this case), not the final overrider (since that hasn't been initialised yet, so can't be accessed safely).
or do I need to just change my constructors to create the models in their respective classes?
That's probably the simplest solution. I'd suggest passing the model as a constructor argument to Body
. That way, it's impossible to forget to set it.