C ++ Namespace

C ++ Namespace
Ein Namespace in C ++ ist ein verallgemeinerter Bereich. Seine Erklärung beginnt mit dem reservierten Wort, dem Namespace, gefolgt von einem Namen der Auswahl des Programmierers und dann des Blocks in Zahnspangen. Der Block enthält grundlegende Erklärungen und/oder Definitionen von C ++ - Objekten, Funktionen und anderen Entitäten.

Betrachten Sie die folgenden zwei skalaren Aussagen in einem globalen Bereich im folgenden Programm:

#enthalten
Verwenden von Namespace STD;
int varid = 5;
float varid = 2.3;
int main ()

Rückkehr 0;

Ein Versuch, dieses Programm zu erstellen, führt zu einem Kompilierungsfehler. Es gibt zwei Variablen mit demselben Namen, Varid. Obwohl es sich um zwei verschiedene Variablen von zwei verschiedenen Typen handelt, int Und schweben, Der Compiler lehnt die beiden Erklärungen ab, weil sie gleicher Name sind. Das folgende Programm löst dieses Problem, indem die Variablen in zwei verschiedenen verallgemeinerten Gebieten mit demselben Namen deklariert werden:

#enthalten
Verwenden von Namespace STD;
Namespace NA

int varid = 5;

Namespace NB

float varid = 2.3;

int main ()

Cout << NA::varId << '\n';
Cout << NB::varId << '\n';
Rückkehr 0;

Die Ausgabe ist wie folgt:

5
2.3

Das obige Programm gibt zwei Namespaces: N / A, die die Definition einer Ganzzahl hat, und NB, die die Definition eines Schwimmers hat, aber mit dem gleichen Namen wie die Ganzzahl für NA. Als das Programm ausgeführt wurde, wurde schließlich der gleiche Name für zwei verschiedene Variablen verwendet. Beachten Sie, dass der bestimmte Name für den Namespace verwendet werden muss, um den gleichen Namen von zwei verschiedenen Variablen zu erhalten. Der Namespace -Name und die gemeinsame Bezeichnung werden vom Operator der Bereichsauflösung getrennt. “::.”Der Name der Namespaces unterscheidet die Objekte.

Dieser Artikel deckt das grundlegende Konzept eines Namespace und seine Verwendung in der Programmiersprache C ++ ab. Um diesem Artikel zu folgen, sollten Sie grundlegende Kenntnisse der C ++ - Sprache haben. Sie sollten auch Kenntnisse über den C ++ - Zielfernrohr haben, obwohl es in diesem Artikel kurz erläutert wird. Um mehr über C ++ - Scope zu erhalten.com Webseite und drücken Sie die Eingabetaste. Dies führt Sie zu dem Artikel, den dieser Autor schrieb.

Artikelinhalt

  • Was ist ein Namespace?
  • Die Verwendung von Anweisungen
  • Verschachtelte Namespaces
  • Standard -Namespace
  • Abschluss

Was ist ein Namespace?

Eine deklarative Region ist der größte Teil eines Programms, in dem der Name einer Entität (Variable) gültig ist. Diese Region wird als Zielfernrohr bezeichnet. Ein Namespace in C ++ ist ein verallgemeinerter Bereich, dessen Hauptzweck darin besteht, Namenskonflikte zu lösen. Ein Namespace hat grundlegende Erklärungen und/oder Definitionen von Entitäten.

Globaler Namespace und sein Problem

Der globale Namespace ist der globale Umfang. Betrachten Sie das folgende kurze Programm:

#enthalten
Verwenden von Namespace STD;
int ident = 55;
float ident = 12.17;
int main ()
Rückkehr 0;

Im obigen Programm gibt es zwei Variablen, die beide genannt werden identifizieren. Diese Variablen befinden sich im globalen Bereich; Das heißt, sie sind im globalen Namespace. Ein Versuch, dieses Programm zu kompilieren. Der globale Bereich akzeptiert nicht mehr als eine Variable mit demselben Namen, sodass ein benutzerdefinierter Namespace erforderlich ist.

Benutzerdefinierter Namespace

Ein Namespace hat nicht nur einen Namen. Stattdessen hat ein Namespace eine Reihe von Namen, um Konflikte mit anderen Namenssätzen zu vermeiden. Um Konflikten im Code niedriger zu vermeiden, gehen Sie jedem Namen mit dem Namen des Namespace vor und vor :: . Das folgende Programm zeigt dies anhand von zwei benutzerdefinierten Namespaces:

#enthalten
Verwenden von Namespace STD;
Namespace NA

int varint = 6;
float flt;

Namespace NB

int varint = 7;
float flt;

int main ()

Cout << NA::varInt << '\n';
Cout << NB::varInt << '\n';
Na :: flt = 2.5;
Nb :: flt = 4.8;
Cout << NA::flt << '\n';
Cout << NB::flt << '\n';
Rückkehr 0;

Die Ausgabe ist:

6
7
2.5
4.8

Beachten Sie, dass die Namen Na :: Flt Und Nb :: flt wurden letztendlich in der definiert hauptsächlich() Funktion. C ++ erlaubt eine solche Definition im globalen Bereich nicht.

Beachten Sie, dass der benutzerdefinierte Namespace ein verschachtelter Namespace für den globalen Namespace ist.

Die Verwendung von Anweisungen

Um zu vermeiden, dass "Neamepace :: Name" ständig eingeben, anstatt nur "Name", nachdem Sie den Namespace deklariert haben, können Sie die verwenden Verwendung Richtlinie. Die Syntax, um die zu verwenden Verwendung Die Richtlinie lautet wie folgt:

Verwenden von Namespace Namespace_Name;

Der Verwendung Die Richtlinie ist keine Präprozessorrichtlinie, daher endet sie mit einem Semikolon (;).

Das folgende Programm zeigt die Verwendung der Verwendung Richtlinie und mehr:

#enthalten
Verwenden von Namespace STD;
Namespace NB

int varint = 7;
int func ()
return varint;


int fn ()
Verwenden von Namespace NB;
int myvar2 = func ();
// andere Objekte und Funktionen von NB folgen.
Myvar2 zurückkehren;

int myvar3 = nb :: func ();
int main ()
Cout << fn() << " << myVar3 << '\n';
Rückkehr 0;

Die Ausgabe dieses Programms ist 7 7. Der Begriff "Verwenden von Namespace NB;Wurde zu Beginn der platziert fn () Definition. Der func () Aus dem NB -Namespace wird direkt darunter aufgerufen, ohne mit voranging zu gehen “NB ::.”

Eine im globale Umfang (globale Namespace) deklarierte Variable wird vom Punkt der Deklaration bis zum Ende der Datei ermittelt. Es ist auch in den verschachtelten Namespaces (verschachtelte Bereiche) wie das verschachtelte fn () Funktionsumfang oben. Der Verwendung Die Richtlinie verbindet ihren Namespace aus der Position, an der sie bis zum Ende des Bereichs platziert wird, in dem es platziert ist.

Der Name func () Aus dem NB -Namespace kann nicht unterhalb der angezeigt werden fn () Definition, weil “Verwenden von Namespace NB; “ wurde innerhalb des Funktionsbereichs (Block) platziert. Unter dieser Bedingung zu verwenden “func ()"Außerhalb des NB -Namespace -Blocks (Umfang) muss es vorangehen"NB ::,”Wie in der folgenden Erklärung:

int myvar3 = nb :: func ();

Der Verwendung Die Richtlinie verbindet ihren Namespace mit dem äußeren Verschachtel -Namespace aus der Position, an der sie bis zum Ende des äußeren Nistennamenspace platziert wird. Im folgenden Programm wird der NA -Namespace mit dem globalen Namespace verbunden. Beide Namespaces erstrecken sich dann in die fn () Funktionsdefinitionsnamespace, in dem sie mit dem NB -Namespace verbunden sind. Der NB -Namespace endet am Ende der fn () Funktionsdefinition und die beiden vorherigen Namespaces bis zum Ende der Datei (lesen Sie den Code durch).

#enthalten
Verwenden von Namespace STD;
Namespace NA

int varint = 6;
int func ()
return varint;


Namespace NB

int varint = 7;
int func ()
return varint;


Verwenden von Namespace NA;
int myvar0 = varint;
// andere Objekte und Funktionen von :: und nb folgen.
int fn ()
int myvar1 = varint;
Verwenden von Namespace NB;
int myvar2 = nb :: func ();
// Andere Objekte und Funktionen von NB folgen bis zum Ende dieses Bereichs.
Myvar1 + myvar2 zurückgeben;

// nur Objekte und Funktionen von :: und nb folgen.
int myvar3 = nb :: func ();
int main ()
Cout << myVar0 << " <<
fn () << " << myVar3 <<
'\N';
Rückkehr 0;

Die Ausgabe ist 6, 13, 7.

Notiz: Der globale Namespace wird mit angezeigt :: , was bedeutet, dass es nichts vor dem folgenden Operator des Bereichsauflösungsbetriebs gibt.

Unter der Aussage die “Verwenden von Namespace NA;”Variablen aus den globalen und na -Namespaces können ohne Hinweis auf ihren Quell -Namespace verwendet werden. Die nächste Anweisung verwendet die Varint des NA -Namespace. Die globale und na kombinierte Namespace -Region erstreckt sich in die fn () Funktionsnamenspace. Also die Varint der ersten Aussage in der fn () Funktionsumfang ist aus dem NA -Namespace.

Da sich die Region für die globalen und na -Namespaces über die gesamte Auswahl erstreckt fn () Umfang nach dem “int myvar2 = nb :: func ();,”Jeder Name aus dem NB -Namespace kann nur in der verwendet werden fn () Geltungsbereich ohne es mit “NB ::,Nur wenn es in den NA- und Global Namespaces (Blöcken) nicht aufgetreten ist. Andernfalls sollte es vorgehen “NB ::.”Die Region der kombinierten Namespaces für NA und Global fn () Definition und in die hauptsächlich() Funktion bis zum Ende der Datei.

Die Erweiterung des NB -Namespace beginnt aus “int myvar2 = nb :: func ();" im fn () blockieren und endet am Ende der fn () Definitionsblock.

Notiz: Namespaces, deren Regionen verbunden sind.

Namespace -Regionen

Ein Namespace ist ein Zielfernrohr. Abgesehen vom globalen Namespace (globaler Umfang) sollte jeder Namespace in einem Block deklariert werden. Dieser Block ist der erste Teil der möglicherweise verteilten Regionen des Namespace. Mit der Verwendungsrichtlinie kann der Namespace als Regionen in anderen Teilen erweitert werden.

In einem Namespace -Gremium deklarierte Entitäten werden als Mitglieder des Namespace bezeichnet, und Namen, die durch diese Erklärungen in die deklarative Region des Namespace eingeführt wurden.

Verschachtelte Namespaces

Das folgende Programm zeigt verschachtelte Namespaces:

#enthalten
Verwenden von Namespace STD;
Namespace a
int i = 1;
Namespace B
int i = 2;
Namespace C
int i = 3;



int main ()

Cout << A::i << " <<
A :: B :: I << " <<
A :: B :: C :: I << '\n';
Rückkehr 0;

Die Ausgabe ist:

1 2 3

Beachten Sie, dass auf die drei Werte mit dem Operator der Bereichsauflösung zugegriffen wurden.

Standard -Namespace

C ++ hat eine Bibliothek namens Standard Library. Die Namen von Objekten, Funktionen und anderen Entitäten in dieser Bibliothek stammen aus einem Namespace namens Standard -Namespace, der als geschrieben wurde std. Die Standardbibliothek enthält Unterbriebraren, und einer dieser Unterbriebäre ist iostream. Der iostream Bibliothek enthält das Objekt Cout, Dies wird verwendet, um Ergebnisse an die Konsole zu senden (Terminal).

Der Name Cout muss in der sein std Namespace. Benutzen iostream mit std Namespace, das Programm sollte wie folgt sein:

#enthalten
Verwenden von Namespace STD;

Beachten Sie die Verwendung der Verwendung der Verwendung Richtlinie und std. Der Begriff "#enthalten Ist eine Präprozessor -Richtlinie und endet nicht mit einem Semikolon. Es enthält die iOstream -Datei an der Position seiner Richtlinie.

Abschluss

Ein Namespace ist ein Zielfernrohr. Die Namespace -Beschreibung (Definition) enthält grundlegende Deklarationen und/oder Definitionen von C ++ - Objekten, Funktionen und anderen Entitäten. Außerhalb der Namespace -Definition kann der Name mit der Syntax zugegriffen werdenNamespaceName :: Name.Abgesehen vom globalen Namespace (globaler Umfang) sollte jeder Namespace in einem Block deklariert werden. Dieser Block ist der erste Teil der möglicherweise verteilten Regionen des Namespace. Mit dem Verwendung Richtlinie, der Namespace kann als Regionen in anderen Gebieten erweitert werden. Namespaces, deren Regionen verbunden sind.