Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Teil einer Klasse kopieren und als neue zurückgeben (https://www.delphipraxis.net/61232-teil-einer-klasse-kopieren-und-als-neue-zurueckgeben.html)

Hador 18. Jan 2006 15:51


Teil einer Klasse kopieren und als neue zurückgeben
 
Hi Leute!

Ich brauche eine Liste, in welche ich
a) ein Objekt einfügen kann
b) das zuletzt eingefügte Objekt weider ausgeben lassen kann
c) das zuletzt eingefügte Objekt löschen kann
d) die Restliste (ohne das zuletzt eingegebene) zurückgeben kann.

Das ganze ist ja bis auf Punkt d) nicht schwer und war auch schnell gelößt. Dort habe ich allerdings Probleme.
Ich Poste hier mal das was ich bisher habe. Auch die bisherige Funktion, welche leider nicht so ganz funktioniert.
Ich hoffe, ihr könnt mir einem kleinen Denkanstoß geben

EDIT: In die Liste sollen übrigends nur Integer rein.

EDIT2: Fehler verbessert (siehe nächer Post)

Delphi-Quellcode:
program IntList;
{$APPTYPE CONSOLE}

type TIntList = class
     private
       FItems: Array of Integer;
     public
       procedure Add(i: integer);
       procedure Del;
       function OutList: TIntList;
       function First: Integer;
     end;


procedure TIntList.Add(i: integer);
begin
  SetLength(FItems, Succ(Length(FItems)));
  FItems[Pred(Length(FItems))] := i;
end;

procedure TIntList.Del;
begin
  SetLength(FItems, Pred(Length(FItems)))
end;

function TIntList.OutList: TIntList;
var
  tmp: Integer;
begin
  tmp := Self.First;
  Self.Del;
  Result := TIntList.Create;
  Result := Self;
  Self.Add(tmp);
end;

function TIntList.First: Integer;
begin
  Result := FItems[Pred(Length(FItems))];
end;

var
  l: TIntList;

begin
  l := TIntList.Create;
  l.Add(99); l.Add(98); l.Add(97); l.Add(96); l.Add(95);

  Writeln(l.First);
  Writeln(l.OutList.First);

  Readln;
  l.Free;
end.

Khabarakh 18. Jan 2006 15:58

Re: Teil einer Klasse kopieren und als neue zurückgeben
 
Delphi-Quellcode:
FItems[Length(FItems)] := i;
Dynamische Arrays sind 0-indiziert, laufen ergo von 0 bis Length - 1.
Delphi-Quellcode:
function TIntList.OutList: TIntList;
begin
  Result := TIntList.Create;
  // Durch Self ohne das letzte Item iterieren und in Result einfügen.
end;
PS: Eine TList statt dem Array wäre besser.

Hador 18. Jan 2006 16:16

Re: Teil einer Klasse kopieren und als neue zurückgeben
 
Zitat:

Zitat von Khabarakh
Delphi-Quellcode:
FItems[Length(FItems)] := i;
Dynamische Arrays sind 0-indiziert, laufen ergo von 0 bis Length - 1.

Jo hast recht. Hab ich garnicht dran gedacht. Umso mehr wundert es micht, dass das ganze dennoch funktioniert hat.
Zitat:

Zitat von Khabarakh
Delphi-Quellcode:
function TIntList.OutList: TIntList;
begin
  Result := TIntList.Create;
  // Durch Self ohne das letzte Item iterieren und in Result einfügen.
end;

Werde ich mal probieren. Hatte ich zwar schon aber er gab mir immer 0 aus (lag daran, dass ich dort auch bei 0 begonnen hatte :wall: )
Zitat:

Zitat von Khabarakh
PS: Eine TList statt dem Array wäre besser.

Da hast du wohl recht. Allerdings haääte ich dann auch die ganzen Funktionen der TList. Oder müsste alle in der abgeleiteten Klassen als private deklarieren, da nur die oben genannten Methoden vorhanden sein sollen.

Tyrael Y. 18. Jan 2006 16:22

Re: Teil einer Klasse kopieren und als neue zurückgeben
 
Was spricht gegen eine TObjectList ??
...damit kannst du alles was du machen willst sehr komfortabel umsetzen

Hador 18. Jan 2006 16:34

Re: Teil einer Klasse kopieren und als neue zurückgeben
 
Dagegen spricht mein Lehrer, der genau die beschriebene Liste haben möchte.
Bisher arbeiten wir mit einer TObjectlist.
Er meinte aber, dass die die mit ihrem derzeitigen Programm schon fertig sind eine solche Klasse entwickeln könnten.
Achso und wenn dann TList und nicht TObjectlist, da da ja nur Integer rein sollen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz