Abgeleitete Klasse: Wie die Klasse trotzdem noch benutzen?
-
Hallo,
erstmal entschuldigung für den Titel, aber ich weiß einfach nicht, wie man soetwas nennt :SMein Problem ist folgendes:
Meine Klasse b ist von Klasse a abgeleitet. Ich erstelle nun ein Objekt von b.Soweit ist es kein Problem: Wenn ich jetzt aber das Objekt als a speichere, kann ich nurnoch die Methoden der Klasse a verwenden, eine zurückwandlung in b scheint nichtmehr möglich zu sein.
Zitat von: http://www.willemer.de/informatik/cpp/cpperben.htm
Person person; Mitarbeiter mitarbeiter; person = mitarbeiter; // ok mitarbeiter = person; // das mag der Compiler nichtWas für ein Möglichkeit gibt es nun, wieder die "echte" Klasse zu bekommen?
Oder muss ich wirklich die eigentliche Klasse zwischenspeichern?Vielen Dank im Voraus!
Gruß
Bastian
-
Es ist durchaus logisch, dass dies nicht funktioniert. Die Echte Klasse bekommst du nie zurück, da alle Daten von dieser durch das Sliceingproblem verloren sind. Du kannst aber die abgeleitete klasse wieder bekommen z.b. durch Operatorenüberladung, durch Konstruktor oder durch casten.
-
Es gibt kein Zurück (falls die abgeleitete Klasse zusätzliche Member hat, was der Fall sein dürfte). Wenn du mehr darüber erfahren möchtest: Das nennt man "object slicing".
-
Dann werde ich es wohl doppelt speichern müssen...
Vielen Dank!

Gruß
Bastian
-
barratator schrieb:
Dann werde ich es wohl doppelt speichern müssen...
Das klingt wild. Um nicht zu sagen unnötig.
-
Mitarbeiter ist doch eine Person, warum doppelt speichern?
-
barratator schrieb:
Soweit ist es kein Problem: Wenn ich jetzt aber das Objekt als a speichere...
Hier gilt das gleiche wie mit Polymorphie: Es funktioniert ausschließlich mit Zeigern oder Referenzen, nicht aber mit Objekten.
P.S: Vielleicht solltest du erst einmal sagen was du konkret machen willst, vielleicht erledigt sich das ganze im Zusammenhang.