Buchgenerator (deaktivieren)

Programmierkurs: Delphi: Pascal: Typdefinition

Aus Wikibooks

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

[Bearbeiten] Typdefinition

Bei einer Typdefinition wird einem Variablentyp ein neuer Bezeichner zugeordnet. Die Typdefinitionen stehen vor den Variablendefinitionen und werden mit dem Schlüsselwort Type eingeleitet. Die Syntax zeigen die folgenden Beispiele.

 type
   int = Integer;
   THandle = Word;
 var
   zaehler: int;
   fensterhandle: THandle;

In den obigen Beispielen wird den in Delphi definierten Typen Integer sowie Word ein zusätzlicher Bezeichner, hier int sowie THandle gegeben. In Variablendefinitionen können danach die neuen Bezeichner verwendet werden.

Im Folgenden werden weitere mögliche Typdefinitionen beschrieben.

[Bearbeiten] Teilbereiche von Ganzzahlen

 type
   TZiffer = 0..9;  // Die Zahlen 0 bis 9
   TSchulnote = 1..6;
 var
   a, b: TZiffer;
 begin
   a := 5;     // zulässig
 //  a := 10;   Diese Zuweisung erzeugt beim Kompilieren eine Fehlermeldung!!!
   b := 6;
   a := a + b; // Dies führt bei Laufzeit zu einer Fehlermeldung, da das
               // Ergebnis außerhalb des Wertebereiches von TZiffer liegt!!!
 end;

[Bearbeiten] Aufzählungen

 type
   TWochentag = (Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag);
   TSchulnote = (sehr_gut, gut, befriedigend, ausreichend, mangelhaft, ungenuegend);
 var
   tag: TWochentag;
 begin
   tag := Mittwoch;
   if tag = Sonntag then Writeln('Sonntag');
 end;

Aufzählungen sind identisch mit Teilbereichen von Ganzzahlen, die mit 0 beginnen. Sie machen aber den Code besser lesbar, wie im letzten Beispiel verdeutlicht.

[Bearbeiten] Records, Arrays

 type
   TKomplex = record
     RealTeil: Double;    // Single, Double, Extended und Real sind in
                          // Delphi definierte Fließkommazahlen
     ImaginaerTeil: Double;
   end;
   TNotenArray = array[1..6] of Integer;

 var
   a, b: TKomplex;
   Noten: TNotenArray;

 function Plus(a1, a2: TKomplex): TKomplex;
 begin
   Result.RealTeil := a1.RealTeil + a2.RealTeil;
   Result.ImaginaerTeil := a1.ImaginaerTeil + a2.ImaginaerTeil;
 end;

 begin
   a.RealTeil := 3;
   a.ImaginaerTeil := 1;
   b := a;
   a := Plus(a, b);
 end.

Records oder Arrays als Typdefinition haben den Vorteil, dass sie direkt einander zugewiesen werden können (a := b) und dass sie als Parameter sowie Rückgabewert einer Funktion zulässig sind. Vergleiche (if a = b then...) sind allerdings nicht möglich.

[Bearbeiten] Zeiger

 type
   PWord = ^Word;
   PKomplex = ^TKomplex;  // nach obiger Typdefinition von TKomplex
 var
   w: PWord;
 begin
   ...
   w^ := 128;
   ...
 end.

Zeiger als Typdefinion sind ebenfalls als Parameter sowie Rückgabewert von Funktionen zulässig. Da ein Zeiger immer eine Adresse speichert, unabhängig vom Typ, auf den der Zeiger zeigt, kann die Typdefinition auch nach der Definition des Zeigers erfolgen, wie im nachfolgenden Beispiel.

 type
   PKettenglied = ^TKettenglied;
   TKettenglied = record
     Glied: Integer;
     Naechstes: PKettenglied;
   end;

[Bearbeiten] Klassen

Die Deklarierung von Klassen ist ebenfalls eine Typdefinition.

Es wird als guter Stil empfunden, wenn Typdefinitionen, die einen Zeiger (englisch: Pointer) definieren, mit P beginnen und alle anderen Typdefinitionen mit T.


Arrow left.png Pascal: Prozeduren und Funktionen Inhaltsverzeichnis Pascal: Typumwandlung Arrow right.png
Persönliche Werkzeuge