Hallo!
Ich habe eine Frage zur Abituraufgabe. Dort soll eine Warteschlange mit Delphi realisiert werden.
Wie eine Warteschlange funktioniert weiß ich und Konzepte der
OOP kenne ich auch (von C++), jedoch nicht (sehr gut) in Delphi.
Hier die
Aufgabe +
Musterlösung:
Prüfungsaufgabe GK 1 Delphi (Aufgabe)
Unterlagen für die Lehrkraft GK 1 Delphi (Musterlösung)
Delphi-Quellcode:
{ Aus der Musterlösung: }
procedure TQueue.enqueue (pObject: TObject);
var lNewNode:TNode;
begin
lNewNode:=TNode.create(pObject,nil);
if self.isEmpty
then begin
hHead:=lNewNode;
hTail:=lNewNode;
end
else begin
hTail.setNext(lNewNode);
hTail:=lNewNode;
end;
end;
1. Ich verstehe hierbei nicht, warum keine Zeiger verwendet werden (z.B.
hTail.setNext(xy
) setzt ja in dieser Prozedur einen
TNode und keinen Zeiger auf einen
TNode). Ist das nicht viel zu langsam und auch nicht ein wenig verwirrend bei einer Warteschlange (die ja fast wie eine Liste ist)?
2. Der Prozedur
TQueue.enqueue wird ja ein Parameter vom Typ
TObject übergeben. Warum ist das wieder kein Zeiger? Es muss doch bei
TNode.create(...) wieder kopiert werden, oder nicht? Steht der Präfix "p" (von
pObject) nicht für Pointer?
3. Vererbung, Polymorphie und andere
OOP-Konzepte kenne ich aus C++. Soweit wie ich die Klasse
TQueue verstanden habe, soll zur Benutzung der Klasse ja ein TObject der Methode
enqueue übergeben werden. Wie kann ich jetzt eigene Datenstrukturen übergeben bzw. wie kann ich die speziellen Eigenschaften meiner Klasse dann in enqueue (oder anderen Methoden von
TQueue) verwenden?
Dieselbe Fragestellung an einem Beispiel:
TXY von
TObject ableiten:
Delphi-Quellcode:
type
TXY = class(TObject)
public
x : integer;
end;
Ich kann ja ein Objekt der Klasse
TXY an
TQueue.enqueue übergeben, doch da ja nirgendwo mit Zeigern gearbeitet wird, wie soll man bitteschön in der Methode
enqueue (oder irgendeiner anderen) dann auf den Integer x der Klasse zugreifen? Es wird doch nur der Basisklassenanteil kopiert oder sehe ich das falsch?
MfG rand