Heterogene Listen

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]

TYPE
   Element = POINTER TO ElementRec;
   ElementRec =
      RECORD
         go: GraphicalObject;
         next: Element;
      END;
   ListOfGraphicalObjects =
      RECORD
         head, tail: Element;
         length: INTEGER;
      END;

PROCEDURE AddElement(list: ListOfGraphicalObjects;
                     go: GraphicalObject);
   VAR element: Element;
BEGIN
   NEW(element); element.go := go; element.next := NIL;
   IF list.head = NIL THEN
      list.head := element;
   ELSE
      list.tail.next := element;
   END;
   list.tail := element; INC(list.length);
END AddElement;

(* ... *)
AddElement(list, circle); AddElement(list, rectangle);

*Listen akzeptieren als Element alle Erweiterungen des vorgegebenen Basistyps.
 
*Wenn GraphicalObject ein Record-Typ ist, geht hingegen (durch die Projektion) die Erweiterung verloren -- bei Zeigern gibt es jedoch keinen Informationsverlust.
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 1999 Andreas Borchert, in HTML konvertiert am 29.06.1999