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