Nous avons introduit les espaces de noms dans l'ensemble 1 ci-dessous.
Espace de noms en C++ | Ensemble 1 (Introduction)
Définir un espace de noms :
Une définition d'espace de noms commence par le mot-clé namespace suivi du nom de l'espace de noms comme suit :
espace de noms namespace_name
{
// déclarations de code, c'est-à-dire variable (int a;)
méthode (void add();)
cours ( élève de la classe{};)
}
Il est à noter qu’il n’y a pas de point-virgule (;) après l’accolade fermante.
Pour appeler la version compatible avec l'espace de noms d'une fonction ou d'une variable, ajoutez le nom de l'espace de noms comme suit :
nom_espace de noms : :code; // le code peut être une fonction ou une classe variable.
La directive using :
Vous pouvez également éviter de pré-ajouter des espaces de noms avec la directive using namespace. Cette directive indique au compilateur que le code suivant utilise des noms dans l'espace de noms spécifié.
L'espace de noms est donc implicite pour le code suivant :
#include using namespace std; // first name space namespace first_space { void func() { cout << 'Inside first_space' << endl; } } // second name space namespace second_space { void func() { cout << 'Inside second_space' << endl; } } using namespace first_space; int main () { // This calls function from first name space. func(); return 0; }
Les noms introduits dans une directive using obéissent aux règles de portée normales. Le nom est visible du point de la directive using jusqu'à la fin de la portée dans laquelle se trouve la directive. Les entités portant le même nom définies dans une portée externe sont masquées.
Espaces de noms imbriqués :
Les espaces de noms peuvent être imbriqués où vous pouvez définir un espace de noms dans un autre espace de noms comme suit :
SYNTAX: namespace namespace_name1 { // code declarations namespace namespace_name2 { // code declarations } } Vous pouvez accéder aux membres d'un espace de noms imbriqué à l'aide des opérateurs de résolution comme suit :
// pour accéder aux membres de namespace_name2
en utilisant l'espace de noms namespace_name1::namespace_name2 ;
// pour accéder aux membres de l'espace de noms:name1
en utilisant l'espace de noms namespace_name1 ;
Dans les instructions ci-dessus, si vous utilisez namespace_name1, les éléments de namespace_name2 seront disponibles dans la portée comme suit :
#include using namespace std; // first name space namespace first_space { void func() { cout << 'Inside first_space' << endl; } // second name space namespace second_space { void func() { cout << 'Inside second_space' << endl; } } } using namespace first_space::second_space; int main () { // This calls function from second name space. func(); return 0; }
Il est également possible de créer plusieurs espaces de noms dans l'espace global. Cela peut être fait de deux manières.
-
Sortir:
-
Sortir:
- Ils sont directement utilisables dans le même programme et servent à déclarer des identifiants uniques.
- Dans les espaces de noms sans nom, le nom de l'espace de noms n'est pas mentionné dans la déclaration de l'espace de noms.
- Le nom de l'espace de noms est généré de manière unique par le compilateur.
- Les espaces de noms sans nom que vous avez créés ne seront accessibles que dans le fichier dans lequel vous les avez créés.
- Les espaces de noms sans nom remplacent la déclaration statique des variables.
CPP
// A C++ program to show more than one namespaces // with different names. #include using namespace std; // first name space namespace first { int func() { return 5; } } // second name space namespace second { int func() { return 10; } } int main() { // member function of namespace // accessed using scope resolution operator cout << first::func() <<"n"; cout << second::func() <<"n"; return 0; }
5 10
Il est également possible de créer deux blocs d'espace de noms portant le même nom. Le deuxième bloc d’espace de noms n’est en réalité que la continuation du premier espace de noms. En termes plus simples, nous pouvons dire que les deux espaces de noms ne sont pas différents mais en réalité identiques et sont définis en partie.
CPP
// C++ program to demonstrate namespace extension #include using namespace std; // first name space namespace first { int val1 = 500; } // rest part of the first namespace namespace first { int val2 = 501; } int main() { cout << first::val1 <<"n"; cout << first::val2 <<"n"; return 0; }
500 501
Espaces de noms sans nom
// C++ program to demonstrate working of unnamed // namespaces #include using namespace std; // unnamed namespace declaration namespace { int rel = 300; } int main() { cout << rel << "n"; // prints 300 return 0; }
Sortir:
300