You can, in theory, use dynamic_cast to cast the Foo reference down to a Poo or Boo reference, but try to avoid it. It is rather poor style and inhibits extensibility. (It's not always avoidable.)