Dynamisch allokiertes Array mit Instanzen verschiedener Klassen füllen
-
Hallo allerseits. Ich habe folgende Frage:
Ich schreibe derzeit ein Programm, dass eine Datei ausliest, darin nach Objekten sucht und diese sammeln soll.
Derzeit löse ich das so, dass für verschiedene Arten Objekte verschiedene Klassen instanziert werden. Allerdings sind alle diese Klassen von einer gemeinsamen Basisklasse abgeleitet.
Dann lasse ich mir die Gesamtzahl der Objekte auslesen und erstelle mit new ein dynamisch allokiertes Array in dieser Größe, als dessen Typ ich die Basisklasse angebe. Dann loope ich durch alle Objekte und möchte jetzt mit jedem Mal das gerade ausgelesene Objekt in dieses Array an die entsprechende Stelle des Durchlaufs einfügen. Allerdings kann ja wie gesagt das gerade ausgelesene Objekt irgendeine der abgeleiteten Klassen sein.
Alles rein hypothetisch. Die Frage dazu: Geht das so überhaupt? Rein intuitiv würde ich ja sagen, nein, weil ja sonst verschiedene Einträge des Arrays verschiedenen Types mit verschiedener Länge sein können. Mir fällt aber auch derzeit nicht ein, wie man das machen könnte.
Das Ziel ist letztenendes einfach nur, alle Objekte, egal welchen Types, in einem Array beisammen zu haben, um sie wieder gescheit ausgeben zu können.
-
Hallo
Eine polymorphe Basisklasse ist schon richtig.
Das Array muß aber eben Pointer auf die Basisklasse als Elementtyp besitzen und du must den Speicher der Elemente manuell reservieren und löschen, einfache Stackinstanzen können reichen u.a. wegen dem von dir genannten Grund nicht mehr aus.bis bald
akari
-
jo kannst ja ein Pointer- Array deiner Instanzen bzw. Basisklassentyp erstellen.
wenn du dann bspw. über eine methode "add(Objekt,index)" eine Instanz deiner subklassen der Basisklasse, oder eine Instanz der Basiklasse selber in das Array anlegen willst, erzeugt du die Instanz mit "new" legst den Pointer im Array ab , und mit der methode "del(index)" musst du dann das Objekt über den pointer mit "delete" wieder löschen.... (das als kleine denkhilfe)
BASISKLASSE **ppArray= new BASISKLASSE*[Arraygröße];nun kannst du einen zeiger in das arra speichern ppArray[index] =POINTER