Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - OOP Liste Vorgänger
Pr0g3r - Mi 01.09.10 12:17
Titel: OOP Liste Vorgänger
Hallo alle zusammen.
Ich habe folgendes Problem: Ich habe mit OOP ein Listenelement programmiert, welches sich selbst verwaltet.
Nun möchte ich gerne, dass die Liste ihren Vorgänger kennt.
Hat irgendjemand eine idee, wie man das bewerkstelligen kann?
//edit: Ich weiss, die Katerogie ist falsch...
Moderiert von
Narses: Topic aus Internet / Netzwerk verschoben am Mi 01.09.2010 um 12:23
elundril - Mi 01.09.10 12:21
Indem du eine Referenz auf das Objekt in der Liste vorher reinschmeißt. ;)
lg elundril
Pr0g3r - Mi 01.09.10 12:29
Vielleicht noch mal zum Verständnis:
Das Listenelement created sich selbst noch mal um ein neues Element dranzumachen.
Für den Vorgänger müsste man sich also selbst mitgeben. Wie geht das?
Nersgatt - Mi 01.09.10 13:12
Indem man beim erstellen eine Referenz auf Self übergibt? Oder hab ich die Frage nicht verstanden?
Pr0g3r - Mo 06.09.10 16:50
also
next := Liste.Create(self); ?
elundril - Mo 06.09.10 18:06
Wir wissen leider nicht wie du deine liste ausprogrammiert hast. Insofern können wir dir auch keinen konkreten Code liefern.
lg elundril
Pr0g3r - Di 07.09.10 11:13
die Liste habe ich wie folgt deklariert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TListe = class
protected zInhalt: TObject; znext: TListe; zprev: Tliste;
public constructor create(plast: TListe; pInhalt: TObject); [...] |
ALso müsste ich den constructor so aufrufen:
next := znext := TListe.Create(
self,pInhalt); ?
Moderiert von
Narses: Delphi-Tags hinzugefügt
Nersgatt - Di 07.09.10 11:24
Probiers doch mal aus. :roll:
martin300 - Di 07.09.10 11:56
Hallo,
dein Konzept ist sehr eigenartig. Aber wenn ich es machen würde, dann hätte ich eine Klasse Liste (die kann die Liste verwalten, dh. Einträge hinzufügen, löschen, speichern) und dann noch eine Klasse Eintrag (dort steht der zu speichernde Eintrag, oder was auch immer). Dann erzeuge ich die Liste und beliebig viele Einträge die hinzugefügt werden.
Nait - Di 07.09.10 21:48
Ah, ein ähnliches Problem hatte ich auch letztens. Ich bin zwar neu in der OOP, habe aber ein effektives Verfahren aus der strukturierten Programmierung angewandt und es funktioniert bei meinen Klassen. Dort kannst du zB einem record-Typ nicht sich selbst als Eigenschaft mitgeben, sondern musst vorher einen Pointer vereinbaren. Bei dir sehe das also so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| type PTListe = ^TListe; TListe = class
protected zInhalt: TObject; znext: PTListe; zprev: PTliste;
public constructor Create(plast: PTListe; pInhalt: TObject); [...] end;
var ListenAnfang, ListenEnde: PTListe; |
Konstruktor entsprechend:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| constructor TListe.Create(plast: PTListe; pInhalt: TObject); begin zInhalt:= pInhalt; zprev:= plast; New(znext); znext^.Create(zprev^.znext, zInhalt); end; |
So wie es jetzt ist, wirds natürlich ne Endlosschleife, also noch nen globalen Zähler mit einfügen. Und das Create-Ereignis im Create muss in ein if-then, für das erste Element (weil das kein vorheriges hat). Ähnlich ist auf das letzte Element zu achten.
Persönlicher Tipp: es existiert bereits
TList und da ist schon alles wichtige drin
Pr0g3r - Mi 08.09.10 12:11
hat sich erledigt.
Das mit dem self hat geklappt, ich konnte es nur nicht ausprobieren, da das ganze Zeug auf dem Schulserver vergammelt...
Trotzdem Danke
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!