L'espace de noms en C ++ est utilisé pour organiser le code en groupes logiques et pour éviter les collisions de noms qui peuvent se produire en particulier lorsque votre base de code comprend plusieurs bibliothèques. Dans cet article, les pointeurs suivants seront abordés:
- Le besoin d'espace de noms
- Définition d'un espace de noms en C ++
- Points à retenir lors de la définition d'un espace de noms
- Utilisation de l'espace de noms en C ++
- Espaces de noms non contigus
- Espaces de noms imbriqués
Le besoin d'espace de noms
Prenons une situation, nous écrivons du code qui a une fonction appelée abc () et il existe une autre bibliothèque prédéfinie disponible qui a également la même fonction abc (). Maintenant, au moment de la compilation, le compilateur n'a aucune idée de la version de la fonction abc () à laquelle nous nous référons dans notre code.
Pour surmonter cette difficulté, l'espace de noms est conçu et est utilisé comme information supplémentaire pour différencier des fonctions similaires, des variables, des classes, etc. avec le même nom disponible dans différentes bibliothèques. En utilisant l'espace de noms, nous pouvons définir le contexte dans lequel les noms sont définis. En substance, un espace de noms définit une portée.
Tous les types et fonctions de bibliothèque standard C ++ sont déclarés dans l'espace de noms std ou les espaces de noms imbriqués dans std, il est donc largement utilisé dans la plupart des programmes.
est une maîtrise considérée comme post-universitaire
Définition d'un espace de noms
Pour définir l'espace de noms, nous commençons par le mot-clé namespace suivi du nom de l'espace de noms comme suit:
namespace namespace_name {int a, b // déclarations de code où // a et b sont déclarés dans // la portée de namespace_name}
Points à retenir lors de la définition d'un espace de noms
- Les déclarations d'espaces de noms n'apparaissent qu'à une portée globale.
- Les déclarations d'espaces de noms n'ont pas de spécificateurs d'accès.
- Les déclarations d'espace de noms peuvent être imbriquées dans un autre espace de noms.
- Inutile de donner un point-virgule après l'accolade fermante de la définition de l'espace de noms.
- La définition de l'espace de nom peut être divisée en plusieurs unités.
#include en utilisant l'espace de noms espace de noms std first_function {void func () {cout<< 'Inside first_function' << endl } } namespace second_function { void func() { cout << 'Inside second_function' << endl } } int main () { // Calls function from first name space. first_function::func() // Calls function from second name space. second_function::func() return 0 }
Production:
Dans l'exemple ci-dessus pour définir la fonction func () à deux reprises, nous utilisons le concept d'espace de noms. Nous définissons la première fonction sous l'espace de noms first_function etdeuxième fonction sous l'espace de noms deuxième_fonction. Pour appeler ces fonctions, nous utilisons l'opérateur de résolution de portée de la manière suivante - first_function :: func () et second_function :: func ().
Utilisation de l'espace de noms en C ++
Il existe trois façons d'utiliser un espace de noms dans le programme,
- La directive using
- La déclaration d'utilisation
- Opérateur de résolution de portée (: :)
La directive using
Nous pouvons éviter d'ajuster les espaces de noms avec le en utilisant directive d'espace de noms. en utilisant Le mot-clé nous permet d'importer un espace de noms complet dans votre programme avec une portée globale. Il peut être utilisé pour importer un espace de noms dans un autre espace de noms ou n'importe quel programme selon nos besoins.
Considérez un fichier d'en-tête Namespace_first.h:
namespace First {int a class First_class {int i}}
Inclure le fichier d'en-tête d'espace de noms ci-dessus dans le fichier Namespace_second.h: inclure «Namespace_first.h»
namespace Second {utilisation de l'espace de noms First First_class obj int y}
Nous importons le namespace_First dans namespace_Second, donc la classe First_class sera désormais disponible dans le namespace_Second. Nous pouvons donc écrire le programme suivant dans un fichier séparé, disons new_file.cpp.
#include 'Namespace_second.h' void test () {using namespace Second // création d'un objet de la classe First_class First_class obj2}
Par conséquent , la directive using facilite grandement l'utilisation d'un espace de noms en C ++, où vous le souhaitez.
La déclaration d'utilisation
Dans la déclaration d'utilisation, nous importons un nom spécifique à la fois qui n'est disponible que dans la portée actuelle et il est appelé à l'aide de la résolution de portée. REMARQUE: Le nom importé avec la déclaration using peut remplacer le nom importé avec la directive using. Nous pouvons le voir dans l'exemple ci-dessous.
Considérons un fichier d'en-tête New_File.h:
namespace First {void A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }
Maintenant, créons un nouveau fichier programme avec le nom New_file_2.cpp avec le code ci-dessous:
#include 'New_file.h' void B () {using namespace First // using la directive using Second :: A // using declaration First :: A () // class A () of First namespace A () // appelle A () of Second namespace}
Opérateur de résolution de portée (: :)
Nous pouvons spécifier explicitement n'importe quel nom déclaré dans un espace de noms en utilisant le nom de l'espace de noms et la résolution de la portée ' :: ' opérateur avec l'identifiant.
java transforme le double en int
namespace New_space {class X {static int i public: void func ()} // déclaration de nom de classe class Y} // Initialisation de la variable de classe statique int New_space :: X :: i = 23 class New_space :: Y {int a public: int getdata () {cout<< a } // Constructor declaration Y() } // Constructor definition explicitly New_space::Y::Y() { a=0 }
Espace de noms discontigu en C ++
Comme nous le savons, un espace de noms en C ++ peut être défini en plusieurs parties, il est donc composé de la somme de ses parties définies séparément. Ainsi, si une partie de l'espace de noms nécessite un nom défini dans un autre fichier, ce nom doit toujours être déclaré dans sa portée. L'écriture de l'espace de noms suivant de la manière suivante définit un nouvel espace de noms ou ajoute de nouveaux éléments à un espace existant:
namespace nom_espace {// corps du code}
Espace de noms imbriqué en C ++
Les espaces de noms peuvent être facilement imbriqués et nous pouvons définir un espace de noms dans un autre espace de noms comme suit:
namespace namespace_name1 {// corps du code de namespace_name1 namespace namespace_name2 {// corps du code nested namamespace_name2}}
Avec cela, nous arrivons à la fin de l'article Namespace in C ++. J'espère que vous avez une idée de ce qu'est exactement un espace de noms en C ++ et quelles sont les différentes façons de le définir. Si vous souhaitez en savoir plus, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate et Spring.
Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de ce blog et nous vous répondrons dans les plus brefs délais.