Ich habe ehrlich gesagt nicht ganz verstanden, worauf du hinaus willst. Was ist denn die "richtige" Methode?
Überprüfen ob ein Objekt einer bestimmten Klasse entspricht kannst du mir dem Operator
is. Von außen die virtuelle Methode einer Vorgängerklasse aufzurufen, sollte - ohne Pointer-Gefrickel - nicht möglich sein. Das ist ja auch nicht der Sinn der Sache. Wenn so etwas nötig ist, ist davon auszugehen, dass es ein Problem im Design der Klassenstruktur gibt.