next up previous contents index
Weiter: 2.4.2 Pointer auf Hinauf: 2.4 Pointer Zurück: 2.4 Pointer

2.4.1 Pointer auf Objekte

Ein Beispiel ist:

type Matrix_Zeiger is access Matrix;

Nach dem Schlüsselwort access kann auch eines der reservierten Wörter all oder constant stehen. Der erste Fall ist der defaultmäßige Fall und bedeutet, daß das desiginierte Objekt verändert werden darf. Im zweiten Fall ist das unterbunden.

Um verkettete Datenstrukturen zu realisieren, bietet Ada die Möglichkeit einer sogenannten unvollständigen Typvereinbarung  , z.B.:

type Knoten;

type Zeiger_auf_Knoten is access Knoten;

type Knoten is
record
Wert: integer;
links: Zeiger_auf_Knoten;
rechts: Zeiger_auf_Knoten;
end record;

Wurzel_des_Baumes: Zeiger_auf_Knoten;

Pointer-Variablen werden implizit mit dem Wert null initialisiert, der einem ungültigen Pointer entspricht.

Das Dereferenzieren eines Pointers geschieht in Ada implizit, falls man eine Komponente des dereferenzierten Objektes anspricht, d.h. also z.B. durch den Punkt-Operator:

Wurzel_des_Baumes.Wert;

Das Dereferenzieren eines Null-Pointers bewirkt allerdings eine Laufzeit-Fehlermeldung (constraint_error). Will man das gesamte dereferenzierte Objekt ansprechen, so kann man all verwenden, z.B. spricht man mit

Wurzel_des_Baumes.all

ein ganzes Objekt des Typs Knoten an.

Das dynamische Anlegen eines Objektes geschieht mittels new, z.B.:

new Knoten;

Man kann auch mit einem qualifizierten Ausdruck einen Anfangswert zuweisen, z.B.:

new Knoten'(Wert => 1, links => null , rechts => null);

Dabei muß auch darauf geachtet werden, daß das dynamisch angelegte Objekt constrained ist.



Johann Blieberger
Wed Feb 11 09:58:52 MET 1998