Vector vererbung und wertzuweisung
-
Hi, bräuchte auch mal eure Hilfe.
Das Problem:Ich hab eine abstracte Oberklasse von der 4 Subklassen(alles konkrete Klassen) erben. Im verlauf des Programms speicher ich Objekte der Subklassen in dem Vector<Oberklasse>.
Jetzt will ich Elemente aus dem Vector einem völlig anderen Objekt übergeben. Damit sie die jeweilige Subklasse als Attribut benutzen können. Jedoch scheint für mich die einzige Möglichkeit das zu machen die zu seien das ich einen cast verwende, an sich ja kein Problem, ist halt nicht sauber und ich meine das es da eine möglichkeit das vllt. nicht direkt simpler aber sauberer zu machen.Beispiel:
Hut und Hose erben von Kleidung ich speicher in einem Vector<Kleidung> alle Hosen und Hüte. Jetzt will ich aus dem Vector eines der Objekte nehmen und dem dementsprechenden Körperteil zuweisen, also das dann der Kopf den Hut kriegt. Jedoch sind die Objekte dann im Vektor als Kleidung gespeichert und der Kopf weigert sich ihn anzuziehen weil er einen Hut erwartet.Hab auch ein Problem mit dem entsprechenden Kopier Konstruktor da ich nicht dasselbe Objekt wie im Vektor benutzen will sondern ein eigenständiges benutzen will. Übergeb ich dem Kopier Konstruktor was aus dem Vector, lässt er mich im Beispiel nur das Kleidungsstück erzeugen. Nicht aber einen Hut, wo ich dann wieder das Dilemma mit der Zuweisung hab.
Eine Lösung wäre für Hut und Hose einen eigenen Vector zu machen, aber das find ich blöd, da ich alles aus einer Textdatei einlese und dann eine Fallunterscheidung machen müsste, ists eine Hose -> Ja -> new Hose() usw.
Ich versuchs noch mit nem TL;DR: 1 Oberklasse 4 Subklassen 1 Vector<Oberklasse> gefüllt mit den Subklassen. Elemente aus dem Vector mit ihrem richtigen Typ einer anderen Klasse zuweisen. Wie(ohne zu casten)?
Fällt das nicht irgendwo unter Polymorphismus? Oder bezieht sich die Polymorphie nur auf die Methoden?
-
Vielleicht kannst du da was mit DoubleDispatching machen...
-
UnterKind schrieb:
Eine Lösung wäre für Hut und Hose einen eigenen Vector zu machen, aber das find ich blöd, da ich alles aus einer Textdatei einlese und dann eine Fallunterscheidung machen müsste, ists eine Hose -> Ja -> new Hose() usw.
Das verstehe ich nohc nicht ganz: Wenn du aus einer Textdatei einliest ... fann musst du ja wohl oder übel eine Fallunterscheidung bezüglich der eingelesenen Daten machen, ob sie jetzt einen Hut von Prada oder ne Hose von Kick repräsentieren. Vllt. kannst du da bitte etwas genauer werden?
Ich fass mal eben kurz zusammen wie ichs bisher verstanden hab:
Abstrakte Oberklasse: Kleidung (nur als beispiel)
Unterklasse (Kleidung): Hut
Unterklasse (Kleidung): HoseKlasse XY: public void test(Hut h); (nur als Beispiel)
Klasse YZ: Vektor<Kleidung>, und xy.test(Element aus Vektor)
Soweit korrekt?
-
Jap soweit korrekt.