Zugriffsoperator / Gültigkeitsoperator - Verwirrung
-
Hallo zusammen,
ich habe folgendes gelernt, dass für mich seitdem eigentlich klar ist:
Der Gültigkeitsoperator :: verbindet eine Klasse und die dazugehörigen Methoden. Bsp:void TClass::Hello(void) { }
Der Zugriffsoperator --> verbindet eine Instanz und eine Methode oder Eigenschaft.
Bsp:Hello1->Do_something ();
Nun ist es aber so, dass ich in meinem aktuellen Buch etwas anderes gelesen habe. Dort ist ein sehr einfaches Beispiel, um zu zeigen, dass man zwei Variabeln (eine global, die andere lokal) mit gleichem Namen verwenden kann. Auf die globale greift man dann mit den beiden Doppelpunkten zu. Hier ein Beispiel:
#include <iostream.h> char cText[255]; int main () { char cText[255]; cout << "Bitte lokalen Text eingeben : "; cin >> cText; cout << "Bite globalen Text eingeben : "; cin >> ::cText; //Zugriff auf gloabe Variabel cout << "Der lokale Text lautet: " << cText << endl; cout << "Der globale Text lautet: " << ::cText; }
Das ist ja alles schön und gut, doch steht dies alles unter der Überschrift "Der Zugriffsoperator". Das verstehe ich nicht, denn hier sind nur die beiden Doppelpunkte (also der Gültigkeitsoperator) zu sehen.
Was verwechsel ich hier oder ist das ein Fehler im Buch?
Vielen Dank für eure Hilfe
lg, freakC++
-
Soviel ich gelernt habe, ist das der Bereichsoperator oder Scope Operator (::) und das andere der Elementverweisoperator (->). Die haben ja nichts miteinander zu tun.
Das sich die Begriffe in deinem Buch widersprechen ist wohl nicht gewollt und kann man auch als "Fehler" sehen. Aber das spielt imho ja keine Rolle, denn du hast offensichtlich verstanden worum es geht und das ist das Wichtigste. Welchen Begriff du fuer die Operatoren benutzt ist dann nur noch nebensaechlich ... (ich denk mal, das ist von Buch zu Buch verschieden)Gruss
Cartman
-
Hallo,
also wenn sowieso jeder seine eigene Bezeichnung hat, dann ist es wohl nicht so schlimm. Ich wollte halt nicht, dass ich dann irgendwann durcheinander komme, da ich mir die Bezeichnungen eigentlich merken wollte.Naja...vielen Dank
lg, freakC++
-
Der
operator::
ist schon der Scope-Operator. Zum einen wird er verwendet, um an den Klassenscope zu gelangen, zum Beispiel bei der Definition von Memberfunktionen oder dem Zugriff auf statische Member oder Typen. Zum anderen braucht man ihn, um Namensräume zu spezifizieren. Dazu gehört auch der globale Namensraum, bei dem einfach kein Bezeichner vor die Doppelpunkte geschrieben wird.Was die Namen betrifft: So ganz eindeutig sind die nirgends festgelegt.
operator->
wird zum Beispiel auch Member-Dereferenzierungsoperator genannt.
-
Und damit es überhaupt jmd macht:
freakC++ schrieb:
#include <iostream.h> //das ".h" muss weg char cText[255]; //warum kein std::string (#include <string>) int main () { char cText[255]; cout << "Bitte lokalen Text eingeben : "; //entweder std::cout oder using namespace std vergessen /*...*/ }
bb
-
mit dem :: operator greifst du auf den entsprechenden namensram / klasse etc. zu.
wenn aber nix davor steht grefist du auf globale elemente zu (global scope).durch den kann man auch alles bekommen, z.b. sowas
::std::cout
hier kommt man über den globalen scope an std.
-
Auch noch ganz nützlich in Hierarchien..
-
hey,
vielen Dank für eure zahlreichen Antworten! Habt mir echt geholfen Klarheit zu verschaffen!Bis dann
lg, freakC++