Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++ Grundkurs

Namensräume

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Ein Namensraum definiert in einer Programmiersprache einen benannten Sichtbarkeitsbereich und fasst darin zusammengehörige Namen zusammen.
07:27

Transkript

In dieser Lektion stelle ich Ihnen Namensräume in C++ vor. Ein Namensraum ist ein benannter Sichtbarkeitsbereich. Dieser Namensraum wird durch das Schlüsselwort namespace definiert. Die Idee eines Namensraums ist es, zusammengehörige Namen zusammenzufassen, um Namenskonflikte zu vermeiden. Verwenden Sie keinen Namensraum, landen alle Namen automatisch im globalen Namensraum. Was dann entsteht, ist der Begriff namespace pollution, unter Namensraumverschmutzung bekannt. Das heißt, Ihr globaler Namensraum enthält immer mehr und mehr Namen, und die Gefahr für Namenskonflikte steigt enorm. Wenn Sie so einen Namenskonflikt haben, moniert das natürlich der Compiler sofort und steigt aus beim Kompilieren. Hier ein Beispiel für einen einfachen Namensraum. Namensraum Date, der enthält drei Variablen year, month und day. Die initialisiere ich gleich. Für Namensräume gibt es ein paar Regeln zu beachten. Ein Namensraum kann alles enthalten, selbst eigenen Namensräume. Sie können also Namensräume ineinander verschachteln. Ein Namensraum ist immer offen für Erweiterungen und die Namen eines Namensraums stehen mit dem qualifizierten Zugriff zur Verfügung. Das heißt, die Namen des Namensraums unterliegen keiner Zugriffskontrolle. Hier zeige ich Ihnen die paar Punkte im Beispiel. Der Namensraum Date, in dem definiere ich die Variable year. Dann mache ich den Namensraum hier Date noch einmal auf und ergänze ihn um die Variable month. Dann kann ich auf Date::year und Date::month zugreifen, indem ich den Namen des Namensraums verwende und den Bereichsoperator. Wenn Sie Namensräume verwenden, ist das manchmal ganz praktisch, wenn Sie auf die Namen eines Namensraums unqualifiziert zugreifen können. Dazu gibt es die using-Deklaration und die using-Anweisung. Zuerst zur using-Deklaration. Die using-Deklaration ermöglicht Ihnen, einzelnen Namen ohne Qualifizierung zu verwenden. Das heißt, dieser Name wird zum aktuellen Sichtbarkeitsbereich hinzugefügt, sodass Sie ihn so angenehm wie hier verwenden können. Das using Date::day; können Sie direkt ohne den Namen Date und den Bereichsoperator verwenden. Hier müssen Sie aber ein bisschen aufpassen. Es tritt dann ein Kompilierfehler auf, wenn der Name im Sichtbarkeitsbereich bereits deklariert wurde. Namen im umgebenden Sichtbarkeitsbereich hingegen werden verborgen. Jetzt kommt die using-Anweisung. Die macht nicht nur einen Namen bekannt, die macht einen ganzen Namensraum bekannt, sodass Sie ihn ohne Qualifizierung verwenden können. Der fügt also alle Namen zum aktuellen Sichtbarkeitsbereich hinzu und das schaut so aus. usingnamespace std; vector myVecStr; Durch das, dass ich hier using namespace std verwendet habe, kann ich statt std::vector[std::string] einfach nur diesen einfachen Ausdruck verwenden. Hier gibt es natürlich auch Regeln im Kopf zu behalten. Erstens ein Kompilierfehler tritt auf, wenn ein Name aus mehreren Sichtbarkeitsbereichen bekannt gemacht wird oder wenn er einen Namen im globalen Namensraum verbirgt. Namen im umgebenden Sichtbarkeitsbereich werden hingegen auch verborgen. Noch eine Regel, die Sie unbedingt beachten sollten. Sie sollten using-Anweisungen, um gesamte Namensbereiche unqualifiziert sichtbar zu machen, nicht in HeaderDateien verwenden, weil Sie sonst mit jeder Inkludierung der HeaderDatei automatisch auch alle Namen bekannt machen und das kann böse Seiteneffekte mit sich bringen. Wie gesagt, Namensräume können manchmal sehr lange werden. Durch das ist es möglich in C++, Namensraum-Aliase zu definieren. Das heißt, Sie definieren kurze Namen für die Namensräume. Sie können aber trotz allem noch die langen Namen auch verwenden. Ich habe hier ein Beispiel. Ich habe hier drei Namensräume, die ich ineinander verschachtelt habe. Der namespace AirTransport enthält den namespace Airbus, enthält den namespace A300 und da drinnen ist meine Variable int engine= 2. Jetzt erkläre ich hier ein namespace-Alias. Durch das Wort namespace AirAirA300 erkläre ich ein namespace-Alias auf diesen langen Namen. Jetzt kann ich auf engine über diesen Alias zugreifen. AirAirA300 oder eben noch über den langen qualifizierten Namen. In C++ gibt es auch unbenannte Namensräume. Ein unbenannter Namensraum ist ein Namensraum ohne Namen. Das Interessante daran ist, dass die Namen dieses unbenannten Namensraums Dateisichtbarkeit haben. D.h., sind nur innerhalb dieser Datei sichtbar und innerhalb dieser Datei können Sie auch unqualifiziert verwendet werden. Hier ein Beispiel. Das ist ein unbenannter Namensraum. Der hat keinen Namen und durch das kann ich den Namen engine in der Datei unqualifiziert verwenden. Statt unbenannten Namensräumen können Sie auch Variablen und Funktionen deklarieren, die statisch und global deklariert sind. Diese haben auch Dateisichtbarkeit. Ich empfehle trotzdem unbenannte Namensräume vorzuziehen. Jetzt will ich Ihnen noch alles in der Anwendung zeigen. Diesmal gibt es zwei Beispiele. Erst mal ein relativ einfaches. Ich verwende hier die using-Anweisung, die using directive. Durch das inkludiere ich den Namensraum std. Das ist der Standard namespace sozusagen. Dann habe ich hier zwei Namensräume. Date, in diesem erkläre ich die Variable year. Ich erweitere diesen Namensraum um die Variable month und dann erkläre ich einen zweiten Namensraum Date2 und in dem erkläre ich eine Variable day. Jetzt schauen Sie einmal, wie ich die verwenden kann. Als Erstes kann ich qualifiziert darauf zugreifen Date::year, Date::month und nicht verwunderlich, dass richtige Dinge rauskommen. Durch die using-Deklaration kann ich einzelnen Namen des Namensraums so in meinen Namensraum einbinden, dass ich sie unqualifiziert verwenden kann. Das mache ich hier. Hier verwende ich den Namen unqualifiziert. Ich kann ihn immer noch qualifiziert verwenden. Die using-Direktive, das ist der Unterschied, die bindet alle Namen von Date2 ein und durch die using-Direktive oder auch die using-Anweisung kann ich alle Namen aus Date2 unqualifiziert verwenden. Das ist der Grund, wieso ich hier Sunday ausgeben kann. Hier habe ich die Namensräume AirTransport, Airbus, A300 und in diesen drei Namensräumen habe ich eine konstante int Variable engine und jetzt zeige ich einfach, wie ich darauf zugreifen kann. Als Erstes stelle ich die Namen des Namensraums unqualifiziert zur Verfügung, indem ich using namespace mache. Zweitens erkläre ich ein Alias. AirAirA300 auf diesen verschachtelten Namensraum. Jetzt zeige ich Ihnen, wie ich die Namen verwenden kann. Erstens kann ich sie natürlich unqualifiziert verwenden, weil ich sie oben inkludiert habe. Also kann ich engine hier direkt verwenden. Zweitens kann ich es natürlich immer noch qualifiziert verwenden, indem ich den langen Namen angebe und drittens kann ich sie über einen Alias verwenden, indem ich den Alias hier anwende. Dass das stimmt, zeige ich Ihnen hier mit namespace Nested mit der Ausgabe des Programms. Sie sehen, unqualifiziert engine, qualifiziert über den langen Namen und Alias über den vereinfachten Namen. In dieser Lektion habe ich Ihnen Namensräume in C++ vorgestellt. Ich habe die Regeln für Namensräume vorgestellt. Ich habe Ihnen insbesondere die using-Deklaration und die using-Anweisung vorgestellt. Die using-Deklaration, um einzelnen Namen unqualifiziert zur Verfügung zu stellen. Die using-Anweisung, um ganze Namensräume unqualifiziert zur Verfügung zu stellen. Was in Zusammenhang mit Namensräumen noch sehr praktisch ist, ist, dass man Aliase darauf erklären kann. Diese helfen lange Namensräume durch einfache Namen unqualifiziert verfügbar zu machen.

C++ Grundkurs

Steigen Sie in die mächtige Programmiersprache C++ ein und lernen Sie dabei alle wichtigen Funktionen mit Anwendungsbeispielen kennen.

8 Std. 14 min (147 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!