class A
{
public:
void nonvirt ();
virtual void virt ();
}
class B : public A
{
public:
void nonvirt ();
void virt ();
}
A a;
B b;
A *ap = &b;
B *bp = &b;
bp->nonvirt (); // вызывает B::nonvirt, как вы и ожидали
ap->nonvirt ();
// вызывает A::nonvirt, даже хотя это и объект типа B
ap->virt (); // вызывает B::virt, корректная версия
процедуры для объектов класса B