Fragen zu Upcasting
-
Hallo, ich habe eine Frage bezüglich Upcasting bzw. ich verstehe da was nicht:
Unzwar wenn ich ein Objekt der Unterklasse zu einem Objekt der Oberklasse mache, dann gehen doch die Informationen in den zusätzlichen Attributen der Unterklasse dieses Objektes verloren.
Wenn ich nun in beiden Klassen eine gleiche Methode habe, und die virtuell mache, dann weiß der Compiler aber trotzdem noch welche Methode zu diesem Objekt gehört. Warum? Ich weiß dass er die Methode erst während der Laufzeit dem Objekt zuordnet. Aber wenn ich in der Laufzeit es zu einem Objekt der oberen Klasse mache, und die informationen durch das sog. stripping verloren gehen, wie kann er dann noch wissen das es mal ein Onjekt der unteren klasse war? er müsste doch dann die Methode der Oberklasse nutzen?
Ich habe leider kein Beispiel ist nur ne allgemeine Frage und hat auch Zeit.
gruß Andy
-
Du musst unterscheiden, wie du castest. Wenn du nur einen Zeiger/eine Referenz der abgeleiteten Klasse zu einem Zeiger/einer Referenz der Basisklasse umwandelst, und dann die Methoden über diesen Verweis aufrufst, ist die Typinformation noch vorhanden, da ja eine abgeleitete Klasse referenziert wird.
static_cast<Base*>(DerivedPtr); static_cast<Base&>(DerivedObj);Wenn du allerdings einen Objekt-Cast machst, also ein neues Objekt der Basisklasse erstellst, hat das nichts mehr mit der abgeleiteten Klasse zu tun. Dementsprechend würde die Basisklassenmethode aufgerufen.
static_cast<Base>(DerivedObj);
-
Ah okay, vielen dank!