C++ Namespaces: Namenskonflikte vermeiden
Zwei Personen namens „Zara“ in derselben Klasse – zur Unterscheidung braucht man Zusatzinfo (Wohnort, Elternname). Gleiches Problem in C++: Eigene Funktion xyz() und Library-Funktion xyz() – Compiler weiß nicht, welche gemeint ist.
Namespace definieren
namespace namespace_name {
// Code-Deklarationen
}
Aufruf mit Scope-Resolution-Operator :::
name::code; // Variable oder Funktion
Beispiel: Zwei Namespaces
#include <iostream>
using namespace std;
namespace first_space {
void func() { cout << "Inside first_space" << endl; }
}
namespace second_space {
void func() { cout << "Inside second_space" << endl; }
}
int main() {
first_space::func();
second_space::func();
return 0;
}
Ausgabe:
Inside first_space
Inside second_space
using-Direktive
using namespace name; – Compiler nimmt an, nachfolgender Code nutzt Namen aus diesem Namespace. Namespace implizit für folgenden Code.
using namespace first_space;
int main() { func(); } // Ruft first_space::func()
Auch für einzelnen Namen: using std::cout; – danach cout ohne Präfix nutzbar, andere std-Member aber explizit (std::endl).
#include <iostream>
using std::cout;
int main() {
cout << "std::endl is used with std!" << std::endl;
return 0;
}
using folgt normalen Scoperegeln: sichtbar von Direktive bis Scope-Ende. Äußere gleiche Namen werden verdeckt.
Discontiguous Namespaces
Namespace kann in mehreren Teilen definiert werden (über mehrere Dateien verteilt). Summe der Teile. Wenn ein Teil Namen aus anderer Datei braucht, muss er trotzdem deklariert sein. Erneute namespace-Definition fügt zu existierendem hinzu oder erstellt neuen.
Verschachtelte Namespaces
Namespace in anderem Namespace:
namespace name1 {
namespace name2 { ... }
}
Zugriff:
using namespace name1::name2; // name2-Member verfügbar
using namespace name1; // name1 + name2 verfügbar
Beispiel
namespace first_space {
void func() { cout << "Inside first_space" << endl; }
namespace second_space {
void func() { cout << "Inside second_space" << endl; }
}
}
using namespace first_space::second_space;
int main() { func(); } // Ruft second_space::func()
Ausgabe: Inside second_space
C Sprache
- C++-Operatoren meistern: Ein vollständiger Leitfaden mit praktischen Beispielen
- C++-Kommentare: Best Practices für lesbaren, wartbaren Code
- C++ Klassentemplates meistern: Ein praktischer Leitfaden
- C++ Programmiersprache: Überblick & Kernfeatures
- C++ Konstanten & Literale: Typen, Syntax & Best Practices
- C++ Operatoren: Typen, Nutzung & Best Practices
- C++ Numerische Typen: Praktischer Leitfaden
- C++ Referenzen: Konzepte & Unterschiede zu Pointern
- C++ Namespaces: Namenskonflikte vermeiden
- C++ Templates: Generische Programmierung meistern