In reply to jms8:
Your assumption is incorrect - the context is not recorded anywhere. The context is used to help make the decision about what override to apply. You only get see the result of that decision, not the factors that led to it.
You can use the virtual methods get_object_type() or get_type_name() to help find out what the resulting typo is.
if (tom.get_object_type() == CatObject::get_type())
// was not overridden
else if (tom.get_object_type() == DogObject::get_type())
// was overriden with a DogObject
else ...