But I know of no allegedly OO language where the method implementation lookup depends on the type of the reference you hold. It runs counter to how polymorphism is supposed to work in which the object responds based on the type of the object and not the type of the reference. So in that respect, C++ is just weird in OO world (and thus, counterintuitive).
Gotta warn the newbies.