They are perfectly redefined.
But you called them from the base constructor, and when the base constructor is executed, the derived part of the object does not exist yet.
So, this is pretty much a security feature, and it's covered by the C ++ standard.
Lightness races in orbit
source share