Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#3

Re: unsichtbare Klassen

  Alt 18. Feb 2007, 02:59
Zitat von Cöster:
Zitat von Muetze1:
1. Entweder einfach im Implementation Teil deklararieren.
Hört sich schonmal gut an, krieg ich aber irgendwie nicht richtig gebacken. Ich hab die Deklaration von TNode einfach unter "implementation" verschoben und noch type davor geschrieben. Dann fängt's allerdings schon damit an, dass TNode (was der Typ einiger Attribute TFIFOs ist) ein undefinierter Bezeichner ist. Zahlreiche weitere Fehlermeldungen folgen.
Das ist klar. Von daher musst du es bei diesem Weg eh so umschreiben, dass TNode nur intern genutzt wird und nur in der Implementation entsprechend ge-typecasted wird.

Zitat von Cöster:
Zitat von Muetze1:
2. Oder als private Sub-Klasse definieren
TNode von TFIFO ableiten? Und dann? Den Typen TNode muss ich bereits in TFIFO verwenden können, da er wie gesagt Typ einiger Attribute dort ist. Was genau ist eine private Subklasse?
Ich habe nix von ableiten geschrieben.

Delphi-Quellcode:
unit FIFO;

interface

type
  TFIFO = class
  private
    Type
      TNode = class
      private
        FNext: TNode;
        FObject: TObject;

      public
        constructor Create(AObject: TObject);
        destructor Destroy; override;
      end;

  private

      FFront: TNode;
      FRear: TNode;
   public
      constructor Create;
      destructor Destroy; override;
      procedure Clear;
      function Dequeue: TObject;
      procedure Enqueue(AObject: TObject);
   end;

implementation


constructor TNode.Create(AObject: TObject);
begin
   inherited Create;
   FObject := AObject;
   FNext := nil;
end;

destructor TNode.Destroy;
begin
   FObject.Free;
   inherited;
end;

constructor TFIFO.Create;
begin
   inherited;
   FFront := nil;
   FRear := nil;
end;

destructor TFIFO.Destroy;
begin
   Clear;
   inherited;
end;

procedure TFIFO.Clear;
begin
   while FFront <> nil do
      Dequeue.Free;
end;

function TFIFO.Dequeue;
begin
   if FFront <> nil then
   begin
      Result := FFront.FObject;
      FFront := FFront.FNext;
   end
   else
      Result := nil;
end;

procedure TFIFO.Enqueue(AObject: TObject);
begin
   if FRear <> nil then
   begin
      FRear.FNext := TNode.Create(AObject);
      FRear := FRear.FNext;
   end
   else
   begin
      FRear := TNode.Create(AObject);
      FFront := FRear;
   end;
end;

end.
/EDIT: Programmierst du wirklich mit TABs? Das gehört meiner Meinung nach verboten...

/EDIT2: Den Constructor und Desctructor kannst du nicht einfach in eine geringere Sichtbarkeit verschieben...
  Mit Zitat antworten Zitat