Klassen - wann . -> :: ?
-
Hallo allerseits,
ich habe mal eine Frage. Gibt es da irgendein "Gesetz" an das man sich halten kann, wann man man die Operatoren . -> und :: benutzt um auf Membervariablen eines Objektes zuzugreifen?
Finde das noch etwas verwirrend, wann sich was besser eignet oder was generell die Konvention - also "üblich - ist.
Vielen Dank euch !
-
Grundsätzlich brauchst du . beim Zugriff auf Objekte und :: beim Zugriff auf Typen und Namensräume.
Hast du ein gutes C++-Buch? Solche Dinge sollten eigentlich erklärt werden...
-
`1: Objekt.Member
2: ZeigerAufObjekt->Member
3: Typ::Member
4: Namespace::Member
`
1 und 2 werden typischerweise verwendet um auf nicht-statische Member zuzugreifen. Dürfen aber auch verwendet werden um aus statische Member zuzugreifen, obwohl man hier typischerweise Variante 3 nimmt.
Mit 3 kann man nur auf statische Member eines Typs zugreifen.
Und mit 4 greift man auf "Namespace Member" zu. Also Typen oder Funktionen die in diesem Namespace deklariert werden.
"Innerhalb" eines Objekts/Typs/Namespaces kann die Qualifizierung typischerweise wegfallen.
Also konkret: innerhalb von Memberfunktionen kann man das "this->" bzw. "Typname::" weglassen, und einfach nur den Namen von Membern schreiben.Und innerhalb eines Namespaces kann man das "NamespaceName::" weglassen.
-
Danke an euch beide ! Das hat mir sehr geholfen.
-
Kleine Ergänzung:
-> ist als Abkürzung für die Kombination von * und . entstanden.
ZeigerAufObjekt->Element
ist dasselbe wie
(*ZeigerAufObjekt).Element
Dass der Dereferenzierungsoperator (*) hier ein Präfixoperator ist, ist halt doch irgendwie etwas unpraktisch bei Element-Zugriffen.
In Pascal war der Dereferenzierungsoperator hingegen ein Postfixoperator (^) und man schriebt das dann einfach so:
ZeigerAufObjekt^.Element
und brauchte deswegen keine extra Syntax wie ->
-
Ergänzung: Es gibt da noch die wenig bekannten Operatoren
.*
und->*
. Braucht man eher selten (den ersten habe ich ungefähr einmal gebraucht, den zweiten nie), aber ist gut zu wissen, dass sie existieren, wenn man mal mit Memberfunktionszeigern arbeitet.P.S.: Der Plenk ist absichtlich gesetzt, damit man sieht, was zum Operator gehört und was Interpunktion ist.