Namespaces C++

Algorithmus, Baumdurchlauf, Compiler, Interpreter...; Cobol, Pascal, C/C++, Java & Co.
Antworten
sandhurst
Mitglied
Mitglied
Beiträge: 19
Registriert: 05.10.04 20:49

Ich benötige eure Hilfe, ich kann mir unter namespaces in c++ nicht besonders viel forstellen.
kann mir jemand evtl. erklären was das genau ist?

danke

gruß

sandhurst
Martin0815
Forums-Scout
Forums-Scout
Beiträge: 374
Registriert: 23.09.04 15:43
Kontaktdaten:

Im Folgenden Text eine kurze Erklärung die ich von der angegebenen Webseite entnommen habe. Diese Webseite enthält recht gute Einführungen zu C++, Java, Javascript, UML und Programmieren im Allgemeinen.

http://www.highscore.de hat geschrieben: Im folgenden Beispiel wird die Zeichenkette "Hallo, Welt!" wieder über cout ausgegeben, erscheint jedoch nicht auf dem Monitor, sondern wird in einer Datei gespeichert.

Code: Alles auswählen

#include <iostream> 
#include <fstream> 

int main() 
{
  std::ofstream File("ausgabe.txt"); 
  std::cout.rdbuf(File.rdbuf()); 
  std::cout << "Hallo, Welt!" << std::endl; 
} 
Sie haben nun im obigen Programm wieder den Text "Hallo, Welt!" in die Standardausgabe ausgegeben. Die letzte Zeile im Programm ist völlig identisch mit der im vorherigen Beispiel. Diesmal erfolgt jedoch bei der Programmausführung keine Ausgabe auf den Bildschirm, sondern die Meldung wird in die Datei ausgabe.txt geschrieben. Sie haben die Standardausgabe umgeleitet - weg vom Monitor, in eine Datei hinein.

Vielleicht ist Ihnen schon aufgefallen, dass im Quellcode an verschiedenen Stellen das Kürzel std:: auftaucht. Es handelt sich hierbei um die Abkürzung von Standard. std ist ein Namespace, also ein klar abgegrenzter Namensbereich. Aufgrund der großen Verbreitung von C++ kann es sein, dass Programmierer beispielsweise gleichlautende Funktionen entwickeln. Um Überschneidungen zu vermeiden, wurden im offiziellen Standard Namespaces eingeführt: Jeder Entwickler sollte also in seinem Programm beispielsweise alle Funktionen einem Namespace zuordnen. Beim Funktionsaufruf wird nun nicht mehr nur der Name der Funktion angegeben, sondern zusätzlich der Namespace, in dem sich die Funktion befindet.

Dass es jetzt zu Überschneidungen kommt, ist zwar nicht ausgeschlossen, aber noch unwahrscheinlicher: Denn jetzt müssen nicht nur Funktionsnamen gleichlauten, sondern auch noch Namespaces. Die Funktionen, Klassen und Objekte, die im C++-Standard definiert sind, sind alle dem Namespace std zugeordnet. Um also auf Funktionen, Klassen und Objekte im C++-Standard korrekt zuzugreifen, wird jeweils std getrennt durch den Zugriffsoperator :: vorangestellt.

Nachdem Namespaces erst im offiziellen C++-Standard eingeführt wurden, benötigen Sie einen recht aktuellen Compiler, damit dieser mit Namespaces umgehen kann. Beschwert sich Ihr Compiler über std::, so lassen Sie dieses Kürzel einfach weg. Folgender Code entspricht also der Schreibweise vor Einführung von Namespaces durch den C++-Standard.

Code: Alles auswählen

#include <iostream> 
#include <fstream> 

int main() 
{ 
  ofstream File("ausgabe.txt"); 
  cout.rdbuf(File.rdbuf()); 
  cout << "Hallo, Welt!" << endl; 
} 
Neben der Einführung von Namespaces hat der C++-Standard noch ein paar andere Änderungen vorgenommen. So wurde vor dem Standard für die Dateien, die über den Befehl #include am Anfang der Datei in spitzen Klammern angegeben werden, immer die Endung .h gesetzt.

Es handelt sich hierbei um Header-Dateien - daher die frühere Dateiendung .h. In diesen Header-Dateien liegen Definitionen für Funktionen und andere Hilfsmittel, die Sie in Ihrem Programm einsetzen wollen. Ohne eine vorherige Definition über die Header-Dateien wäre ein Einsatz fremder Hilfsmittel nicht möglich, da der Compiler nicht erkennen könnte, was für Hilfsmittel Sie eigentlich versuchen einzusetzen. So müssen Sie immer die Header-Datei iostream mit #include einbinden, wenn Sie auf cout zugreifen wollen. Die Header-Datei fstream ist notwendig, wenn Sie wie im obigen Beispiel mit Dateien arbeiten wollen und ofstream einsetzen.

Für Compiler, die noch nicht nach dem neuen C++-Standard arbeiten, lauten die ersten beiden Zeilen wie folgt.

Code: Alles auswählen

#include <iostream.h> 
#include <fstream.h> 
Die Compiler-Hersteller arbeiten daran, ihre Produkte dem neuen C++-Standard anzupassen. In einigen Jahren wird es hier hoffentlich eine breitere Unterstützung geben. Während GCC seit der weit verbreiteten Version 2.95.2 Namespaces unterstützt und Sie somit auf halbwegs aktuellen Unix- und Linux-Systemen Namespaces in C++ einsetzen können sollten, fehlt diesem Compiler bis heute eine Final-Version der C++ Standard Library. Hier können zwar aus dem Internet kostenlose Implementationen der C++ Standard Library heruntergeladen werden, diese zusätzliche Arbeit bleibt dem Programmierer in Zukunft aber hoffentlich erspart. Momentan müssen Sie sich bei GCC standardmäßig mit einer Implementation der C++ Standard Library begnügen, die immer noch in der Entwicklung ist und daher derzeit im Beta-Stadium vorliegt.
sandhurst
Mitglied
Mitglied
Beiträge: 19
Registriert: 05.10.04 20:49

vielen dank ist echt eine coole seite!
Antworten