Gültigkeitsbereich von Elementen

Aus Appmethod Topics
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. Die Influenz von X:: wird im Rumpf der Definition erweitert. Dies erklärt, warum das von func gelieferte i auf X::i, dem char* i von X referenziert anstatt auf das globale int i. Ohne den Modifizierer X:: würde die Funktion func eine gewöhnliche Nichtklassen-Funktion darstellen, die das globale int i liefert.

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 . and -> 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);   // andernorts definiert
};
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