Objekte

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Deklarationen - Index

Ein Objekt ist ein spezieller Speicherbereich, in dem ein fester oder variabler Wert (oder eine Menge von Werten) steht. (Die Bezeichnung Objekt an dieser Stelle darf nicht mit dem allgemeineren OOP-Begriff "Objekt" verwechselt werden.) Jeder Wert hat einen assoziierten Namen und einen Typ (den sogenannten Datentyp). Der Zugriff auf das Objekt erfolgt über seinen Namen. Dieser Name kann ein einfacher Bezeichner oder ein komplexer Ausdruck sein, der eindeutig auf das Objekt verweist. Der Typ wird verwendet, um

  • die erforderliche, korrekte Speicherreservierung zu bestimmen.
  • bei späteren Zugriffen die in den Objekten gespeicherten Bitmuster zu interpretieren.
  • bei Typ-Überprüfungen ungültige Zuweisungen zu erkennen.

Der Embarcadero C++-Compiler unterstützt alle Standard-Datentypen. Dazu gehören ganze Zahlen mit und ohne Vorzeichen in verschiedenen Größen, Gleitkommazahlen mit unterschiedlicher Genauigkeit, Strukturen, Varianten, Arrays und Klassen. Zusätzlich können Zeiger auf fast alle Objekte definiert und im Speicher verwendet werden.

Objekte und Deklarationen

Deklarationen stellen die notwendige Verbindung zwischen Bezeichnern und Objekten her. Jede Deklaration verknüpft einen Bezeichner mit einem Datentyp. Darüber hinaus bestimmen die meisten Deklarationen, die sogenannten Definitionsdeklarationen, auch die Generierung des Objektes (wo und wann), d.h., sie übernehmen die Zuweisung des Speicherplatzes und bei Bedarf seine Initialisierung. Andere Deklarationstypen, sogenannte Referenzdeklarationen, geben dem Compiler lediglich ihre Bezeichner und Typen bekannt. Für einen Bezeichner kann es viele Referenzdeklarationen geben, besonders in einem Programm mit vielen Dateien. Es darf aber nur eine Definitionsdeklaration für diesen Bezeichner geben.

Generell gilt: Ein Bezeichner kann in einem Programm nicht vor seiner Deklaration im Quelltext verwendet werden. Zulässige Ausnahmen von dieser Regel, sogenannte forward-Referenzen, sind Labels, Aufrufe von nicht deklarierten Funktionen und die Deklarationen von Klassen, Strukturen und Varianten.

L-Werte

lvalue ist ein Objektbezeichner: ein Ausdruck, der ein Objekt kennzeichnet. Ein Beispiel für einen L-Wert-Ausdruck ist *P, wobei P ein Ausdruck für einen Zeiger ungleich Null ist. Ein modifizierbarer L-Wert ist ein Bezeichner oder ein Ausdruck, der zu einem Objekt gehört, auf das zugegriffen werden kann und das im Speicher geändert werden darf. Ein const-Zeiger auf eine Konstante ist zum Beispiel kein modifizierbarer L-Wert. Ein Zeiger auf eine Konstante kann geändert werden, nicht aber deren dereferenzierter Wert.

Historisch steht L für "links", das heißt, dass ein L-Wert auf der linken Seite einer Zuweisungsanweisung (auf der empfangenden Seite) stehen darf. Jetzt dürfen nur noch modifizierbare L-Werte auf der linken Seite einer Zuweisungsanweisung stehen. Sind a und b beispielsweise nichtkonstante Integer-Bezeichner mit einem entsprechend zugewiesenen Speicherplatz, dann handelt es sich bei beiden um modifizierbare L-Werte. Somit sind Zuweisungen wie etwa a=1 und b=a+b zulässig.

R-Werte

Der Ausdruck a + b selbst ist kein L-Wert. a + b = a ist ungültig, weil sich der Ausdruck auf der linken Seite nicht auf ein Objekt bezieht. Derartige Ausdrücke werden oft als R-Werte bezeichnet (als Abkürzung für "rechte" Werte).

Siehe auch