Gültigkeitsbereich von Elementen
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
- C++-Klassen
- Klassentypen
- Gültigkeitsbereich Klasse
- Klassenobjekte
- Klassen-Member-Liste
- Member-Funktionen
- Das Schlüsselwort this
- Statische Elemente
- Inline-Funktionen
- Verschachtelte Typen
- Element-Zugriffskontrolle
- Zugriff auf Basisklassen und abgeleitete Klassen
- Virtuelle Basisklassen
- Friends von Klassen