On Mon, Sep 30, 2002 at 09:53:32PM +0200, Erik Schanze wrote:
Hallo!
Hi Erik,
Ich möchte ein Programm schreiben, dass in einer doppelt verketteten Ringliste Datenobjekte verwaltet und hänge an einem Verständnis-Problem fest.
Ich habe eine Klasse "Liste" geschrieben, die aus einer Klasse "Elemente" abgeleitet ist und diese Listenelemente zusammenfügt. Ein Element hat drei Zeiger, einen auf das vorhergehende, einen auf das nachfolgende Element und einen auf das Datenobjekt des Listeneintrags, ein Objekt der Klasse "Objekt".
Wenn ich mir eine Funktion schreibe, die aus eingegebenen Strings z.B. ein Objekt der Klasse "Person", die von "Objekt"abgeleitet ist, zusammenstellt und in die Liste einordnet, wird das Objekt beim Verlassen der Funktion wieder zerstört (logisch) und der Zeiger der Liste auf das Datenobjekt zeigt ins Leere.
Das muss nicht sein. Normalerweise ist eine Liste nur ein Container für Objekte oder ObjektPointer. Im letzteren (deinem) Fall hat die Liste nichts mit dem Löschen der Datenobjekte zu tun, sondern verwaltet nur Pointer die auf Datenobjekte die vorher irgendwo mittels 'new' erzeugt worden.
Deine Listenklasse muss also nur die Methoden
void add( T *ptr ); void remove( T *ptr ); T* get( int pos );
anbieten, welche die Pointer entgegennehmen und intern dem DatenPointer des ListenElements zuordnen, bzw. zurückgeben oder ebend das DatenElement entfernen.
T ist übrigens ein Template-Typ.
Ciao, Tobias