Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » FAQ C / C++ (ANSI-Standard) » Namespaces "::"

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.08.2004, 20:21 Uhr
~(s)nnob
Gast


was bedeutet eigentlich "::" , bei std::cout oder bei iteratoren oder bei verknüpfungen...?
wo/wann wird es eingesetzt?
wieso/warum wird es eingestzt?
was bedeutet es?
ich bin anfänger und ich sehe dieses zeichen ziemlich oft und weiß nicht allzuviel damit anzufangen, hab nischt dazu gefunden beim googlen.
gibts da sowas wie ne Liste mit möglichen sachen die davor oder dahinter stehen können.


beispiele:


C++:
std::size_t z=temp.size();



C++:
string str("kleiner teststring zum durchsuchen");
   string::pos_type pos = str.find("teststring");
      if(pos != string::npos)
          cout<<"string gefunden";



C++:
vector<string>::reverse_iterator runner = mED.rbegin();



thx

Dieser Post wurde am 30.01.2007 um 22:01 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.08.2004, 21:40 Uhr
virtual
Sexiest Bit alive
(Operator)


Das ist in C++ der sogenannte "Scope Resultion Operator". Hört sich schlimmer an, als es eigentlich ist:
Alles, was in C/C++ Rang und Namen hat, hat einen bestimmten Gültigkeitsbereich. zB sind variablen, die man in einer Funktion lokal definiert auch nur innerhalb der Funktion (genau: ab deklaration bis zur korrespondierenden geschweiften Klammer zu) "sichtbar", also ansprechbar:

C++:
void f()
{
    foo;
     {
        int eine Variable; // Abhier ist Variable sichtbar/absprechbar
        ...
     }
    bar; // Hier ist die Variable nicht mehr sichtbar.
}


Ebenso ergeht es Membervariablen/methoden von Klassen und bestimmten Funktionen (eben solche, die Statisch deklariert sind). Daneben gibt es noch andere Gültigkeitsbereiche, nämlich Namespaces. Gültigkeitbereiche sind "Scopes".
Bei lokalen Variablen leuchtet es sofort ein, daß diese nur in der Funktion sichtbar/ansprechbar sein sollen, denn lokale Variablen sollen eben nicht von außerhalb der Funktion veränderbar sein.

Nun gibt es aber andere Scopes, bei denen man ggf. will, daß man auch von außen auf die in ihnen enthaltenen Symbole zugreifen kann. Dies sind zwei Scope typen:
1. Klassen.
2. Namespaces.

namespace Dienen im wesentlichen dazu, namenskonflikte zu vermeiden: Nehmen wir an, du hast eine nette Klasse geschrieben, welche eine Matrix realisiert. Sinnvollerweise nennst Du die Klasse "matrix". Ich bin auf die gleiche Idee gekommen und schreibe auch eine solche Klasse, mit gleichen Namen. Jemand anders will - auswelchen Gründen auch immer - nun sowohl deine alsauch meine matrix klasse verwenden. Das würde erstmal nicht funktionieren: er müsste sich wegen der One Definition Rule in C++ für eine Matrix Klasse entscheiden, weil sie ja gleich heissen.
Eine solche Situation kann tatsächlich auftreten und um ihr aus dem Weg zu gehen, hat man Namespaces erfunden: man kann als einen Gültigkeitsbereich schaffen, in dem der Name der Klasse ansprechbar sein soll, etwa so:

C++:
namespace vns { // virtuals namespace
  
class matrix {
...
};

} // ENde namespace


Solange Du dich in der geschweiften Klammer vom Namespace aufhälst, kannst Du die Klasse matrix "normal" nutzen. Wenn Du ausserhalb bist, mußt du zusätzlich angeben, welche Matrix klasse du benutzen willst:

C++:
vns::matrix  x; // Ich will die matrix aus dem namespace vns


Oder aber (eher schlechter Stil):

C++:
using namespace vns; // Importiere alle Symbole aus dem Namespace vns
matrix x;


Oder (etwas besserer Stil):

C++:
using vns::matrix;  // Wenn wir matrix nehmen, dann aus dem Namespace vns
matrix x;


Standard C++ kommt mit der STL daher und damit mit einer Reihe Templates / Klassen /Typen. Diese stehen in dem Namespace "std". Generell kann ich Dir nur empfehlen, auf diesen using Unsinn zu verzichten, weil Namespaces schon ihren Sinn haben und using dies konterkariert.

Aber auch bei Klassen benätigt man hin und wieder Diesen Sc.Res.Op.:

C++:
class MyStaticHelper
{
public:
    static void helper();
};


Diese statische Method kann man so aufrufen:

C++:
MyStaticHelper::helper();


wäre das jetzt alles im Namespace vns gewesen natürlich:

C++:
vns::MyStaticHelper::helper();


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 03.08.2004 um 21:43 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.08.2004, 22:14 Uhr
Pablo
Supertux
(Operator)


Diese Frage wird immer wieder gestellt. Die Erklärung ist super --> FAQ Eintrag
-->
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ FAQ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: