Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

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 löst dies: Zusatzinformation zur Differenzierung gleicher Namen in verschiedenen Libraries. Definiert Kontext/Scope für Namen.

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

  1. C++-Operatoren meistern: Ein vollständiger Leitfaden mit praktischen Beispielen
  2. C++-Kommentare: Best Practices für lesbaren, wartbaren Code
  3. C++ Klassentemplates meistern: Ein praktischer Leitfaden
  4. C++ Programmiersprache: Überblick & Kernfeatures
  5. C++ Konstanten & Literale: Typen, Syntax & Best Practices
  6. C++ Operatoren: Typen, Nutzung & Best Practices
  7. C++ Numerische Typen: Praktischer Leitfaden
  8. C++ Referenzen: Konzepte & Unterschiede zu Pointern
  9. C++ Namespaces: Namenskonflikte vermeiden
  10. C++ Templates: Generische Programmierung meistern