Es wurden ja schon Wege genannt aber wie gesagt sind das nur Painkiller und keine Lösungen für das wirkliche Problem. Das verbirgt sich nämlich hinter der Tatsache warum du sowas
überhaupt tun willst. Die Lösung heißt virtuelle Methoden wie Sylence schon gesagt hat. Und damit mein ich keine virtuelle GetType() Methode.
Also möchte ich abfragen: Ist diese Einheit ein Krieger? etc.
Warum willst du das tun? Wenn du das tun willst heißt das du hast ein Designproblem....
Und wenn man es doch braucht, warum reicht eine einfache Funktion der Art GetUnitType() nicht aus?
Eine GetUnitType() Methode ist auch nix Andres als ein selbstgebauter typeid-Operator, da kannst du genausogut einfach den in C++ eingebauten nutzen. Aber wenn man meint sowas zu brauchen steckt
praktisch immer ein Designproblem dahinter. Denn überleg mal was es eigentlich bedeutet wenn du den Laufzeit-Typ eines Objektes bestimmen willst um zu entscheiden was damit getan werden muss. Das bedeutet schlicht und einfach dass deine Abstraktion widersprüchlich ist. Wenn du eine Funktion hast die mit Units arbeitet aber für eine bestimmte Art von Unit etwas anderes machen soll als für eine andere Art von Unit dann heißt das: Dein Konzept einer Unit ist unvereinbar mit der Operation die du gerade zu implementieren versuchst. Meistens wird das daran liegen dass die Operation in ihrer Natur spezieller als Unit ist. Aber du musst in jedem Fall entweder die Schnittstelle Unit überdenken oder die Sinnhaftigkeit dessen was du gerade damit vorhast.