Zitat von
rand:
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)?
Einerseits handelt es sich um Zeiger (typisierte Zeiger) und andererseits ist es - wie der Name sagt - eine Musterloesung. Das kann man auch auf zig andere Arten implementieren.
Zitat von
rand:
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?
Das Object (mit dem Inhalt) muss ohnehin kopiert werden. Ob Du
new(p);
p^:=TNode.create()
machst - oder ein den Zeiger weglaesst ist insofern dasselbe.
Zitat von
rand:
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?
Na, wenn Du alle Objekte von Tobject ableitest, dann kannst Du auch all diese Objekte an die Methode enqueue uebergeben - ohne dass der Compiler meckert.
(Sauberer waere es aber einen Vorfahr QueueElement zu nehmen.)
Zitat von
rand:
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?
Machst Du einen Typecast, dann geht das. Das muesstest Du mit einem Pointer auch machen. Denn der Pointer hat ja auch keine Property x:integer;
Daher waere es eben sinnvoll einen Vorfahr "QueueElement" zu deklarieren, der ueber die wichtigsten properties verfuegt.