Also nochmal, wenn eine Methode nicht virtual deklariert ist, und ich richte einen Zeiger auf ein Objekt von der Klasse der Methode ein, dann kann der Zeiger sinnvollerweise auch Objekte aus vererbten Klassen aufnehmen. Versucht man aber nun Methoden in vererbten Klassen zu überschreiben, so wird beim Aufruf der Funktion trotzdem immer die "Urfunktion" aufgerufen. Dies liegt daran, dass bereits vor Programmausführung anhand dem Zeigertyp festgelegt wird (der ja auf die Urklasse gerichtet ist), dass die Urmethode benutzt wird.
Ist die Methode nun virtual, wird genau dies erst zur Laufzeit entschieden, und es wird diejenige Methode ausgeführt, die zu dem aktuellen Objekt gehört, also hier die in der vererbten Klasse überschriebene Methode.
Ich hoffe das hilft
