Gültigkeitsbereich von Elementen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Gültigkeitsbereich von Elementen - Index

In Inline-Funktionen und Exceptions verwendet der Ausdruck X::func() des Beispiels den Klassennamen X mit dem Gültigkeitsbereichs-Zugriffsmodifizierer. Dadurch wird angezeigt, dass func als Elementfunktion von X betrachtet wird und den gleichen Gültigkeitsbereich wie X besitzt, obwohl es "außerhalb" der Klasse definiert wurde. Der Einfluss von X:: wird in den Rumpf der Definition erweitert. Dies erklärt, warum das von func zurückgegebenei auf X::i, dem char* i von X, verweist, anstatt auf das globale int i. Ohne den Modifizierer X:: würde die Funktion func eine gewöhnliche Nicht-Klassen-Funktion darstellen, die das globale int i zurückgibt.

Alle Elementfunktionen sind also im Gültigkeitsbereich ihrer Klasse, auch wenn sie außerhalb der Klasse definiert wurden.

Auf Datenelemente der Klasse X kann mit Hilfe der Auswahloperatoren . und -> zugegriffen werden (wie in C-Strukturen). Dies gilt auch für Elementfunktionen (siehe "Das Schlüsselwort this"). Ein Beispiel:

class X {
public:
   int i;
   char name[20];
   X *ptr1;
   X *ptr2;
   void Xfunc(char*data, X* left, X* right);   // define elsewhere
};
void f(void);
{
   X x1, x2, *xptr=&x1;
   x1.i = 0;
   x2.i = x1.i;
   xptr->i = 1;
   x1.Xfunc("stan", &x2, xptr);
}

Für ein Element oder Basiselement m der Klasse X nennt man den Ausdruck X::m einen qualifizierten Namen. Er hat den gleichen Typ wie m und ist nur dann ein L-Wert, wenn auch m ein L-Wert ist. Auf das korrekte Element m kann damit auch dann zugegriffen werden, wenn der Klassenname X durch einen anderen Namen verdeckt ist (durch Verwendung von X::m).

Es ist nicht möglich, in einem anderen Programmteil als der Klassendeklaration selbst Elemente einer Klasse hinzuzufügen. Die Klasse X kann nicht Objekte derselben Klasse X enthalten, wohl aber Zeiger oder Referenzen auf Objekte derselben Klasse X (ähnlich wie bei C-Strukturen und Varianten).

Siehe auch