Espace de noms C ++

Espace de noms C ++
Un espace de noms en C ++ est une portée généralisée. Sa déclaration commence par le mot réservé, l'espace de noms, suivi d'un nom du choix du programmeur, puis du bloc en accolades. Le bloc contient des déclarations de base et / ou des définitions des objets C ++, des fonctions et d'autres entités.

Considérez les deux instructions scalaires suivantes dans une portée mondiale, dans le programme suivant:

#inclure
Utilisation de Namespace Std;
int varid = 5;
flottant varide = 2.3;
int main()

retour 0;

Une tentative de compilation de ce programme conduit à une erreur de compilation. Il y a deux variables du même nom, variable. Bien qu'ils soient deux variables différentes de deux types différents, int et flotter, Le compilateur rejette les deux déclarations car ils sont du même nom. Le programme suivant résout ce problème en déclarant les variables avec le même nom dans deux lunettes généralisées différentes:

#inclure
Utilisation de Namespace Std;
espace de noms na

int varid = 5;

Espace de noms NB

flottant varide = 2.3;

int main()

couter << NA::varId << '\n';
couter << NB::varId << '\n';
retour 0;

La sortie est la suivante:

5
2.3

Il y a deux espaces de noms dans le programme ci-dessus: N / A, qui a la définition d'un entier, et NB, qui a la définition d'un flotteur mais avec le même nom que l'entier pour NA. Enfin, lorsque le programme a été exécuté, le même nom pour deux variables différentes a été utilisé. Notez que pour accéder au même nom de deux variables différentes, le nom particulier de l'espace de noms doit être utilisé, suivi de l'identifiant commun. Le nom de l'espace de noms et l'identifiant commun sont séparés par l'opérateur de résolution de portée, «::.«Le nom des espaces de noms différenciera les objets.

Cet article couvre le concept de base d'un espace de noms et son utilisation dans le langage de programmation C ++. Pour suivre cet article, vous devriez avoir une connaissance de base de la langue C ++. Vous devriez également avoir une connaissance de la portée C ++, bien qu'elle soit brièvement expliquée dans cet article. Pour en savoir plus sur la portée C ++, recherchez la phrase «Scope in C ++» (sans citations) dans la recherche de tout linuxhint Linuxhint.Com et appuyez sur Entrée. Cela vous mènera à l'article que cet auteur a écrit.

Contenu de l'article

  • Qu'est-ce qu'un espace de noms?
  • La directive d'utilisation
  • Espaces de noms imbriqués
  • Espace de noms standard
  • Conclusion

Qu'est-ce qu'un espace de noms?

Une région déclarative est la plus grande partie d'un programme dans lequel le nom d'une entité (variable) est valide. Cette région est appelée une portée. Un espace de noms en C ++ est une portée généralisée dont le but principal est de résoudre les conflits de noms. Un espace de noms a des déclarations de base et / ou des définitions des entités.

Espace de noms global et son problème

L'espace de noms mondial est la portée globale. Considérez le programme court suivant:

#inclure
Utilisation de Namespace Std;
int identif = 55;
float identif = 12.17
int main()
retour 0;

Dans le programme ci-dessus, il existe deux variables, toutes deux appelées identifier. Ces variables sont dans la portée globale; c'est-à-dire qu'ils sont dans l'espace de noms mondial. Une tentative de compilation de ce programme échouera avec un message d'erreur. La portée globale n'accepte pas plus d'une variable avec le même nom, il y a donc un besoin pour un espace de noms personnalisé.

Espace de noms personnalisé

Un espace de noms n'a pas un seul nom. Au lieu de cela, un espace de noms a un ensemble de noms pour éviter les conflits avec d'autres ensembles de noms. Pour éviter les conflits plus bas dans le code, précédez chaque nom avec le nom de l'espace de noms et :: . Le programme suivant illustre cela en utilisant deux espaces de noms personnalisés:

#inclure
Utilisation de Namespace Std;
espace de noms na

int varint = 6;
float flt;

Espace de noms NB

int varint = 7;
float flt;

int main()

couter << NA::varInt << '\n';
couter << NB::varInt << '\n';
Na :: flt = 2.5;
Nb :: flt = 4.8;
couter << NA::flt << '\n';
couter << NB::flt << '\n';
retour 0;

La sortie est:

6
7
2.5
4.8

Notez que les noms Na :: flt et NB :: flt ont finalement été définis dans le principal() fonction. C ++ n'autorise pas une telle définition dans la portée globale.

Notez que l'espace de noms personnalisé est un espace de noms imbriqué pour l'espace de noms global.

La directive d'utilisation

Pour éviter de taper «namepace :: name» tout le temps au lieu de simplement «nom» après avoir déclaré l'espace de noms, vous pouvez utiliser le en utilisant directif. La syntaxe pour utiliser le en utilisant La directive est la suivante:

Utilisation de Namespace Namespace_name;

Le en utilisant La directive n'est pas une directive préprocesseur, donc elle se termine par un point-virgule (;).

Le programme suivant illustre l'utilisation du en utilisant Directive et plus:

#inclure
Utilisation de Namespace Std;
Espace de noms NB

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


int fn ()
Utilisation de l'espace de noms NB;
int myvar2 = func ();
// D'autres objets et fonctions de NB suivent.
retourner myvar2;

int myvar3 = nb :: func ();
int main()
couter << fn() << " << myVar3 << '\n';
retour 0;

La sortie de ce programme est 7 7. Le terme "Utilisation de l'espace de noms NB;«A été placé au début du fn () définition. Le func () De l'espace de noms NB est appelé juste en dessous, sans précéder «NB ::."

Une variable déclarée dans la portée globale (espace de noms global) est visible du point de déclaration à la fin du fichier. Il est également vu dans les espaces de noms imbriqués (lunettes imbriquées), comme les imbriquées fn () Portée de la fonction ci-dessus. Le en utilisant directive rejoint son espace de noms à partir de la position à laquelle il est placé à la fin de la portée dans laquelle il est placé.

Le nom func () de l'espace de noms NB ne peut pas être vu sous fn () Définition parce que «Utilisation de l'espace de noms NB; » a été placé dans la portée de la fonction (bloc). Dans cette condition, à utiliser "func ()«En dehors du bloc NB de l'espace de noms (portée), il doit être précédé de«NB ::,«Comme dans la déclaration suivante:

int myvar3 = nb :: func ();

Le en utilisant Directive rejoint son espace de noms avec l'espace de noms de nidification externe de la position à laquelle il est placé à la fin de l'espace de noms de nidification externe. Dans le programme suivant, l'espace de noms NA est joint à l'espace de noms global. Les deux espaces de noms s'étendent ensuite dans le fn () Espace de noms de définition de fonction, dans lequel ils sont joints à l'espace de noms NB. L'espace de noms NB se termine à la fin du fn () Définition de la fonction, et les deux espaces de noms précédents se poursuivent jusqu'à la fin du fichier (lisez le code).

#inclure
Utilisation de Namespace Std;
espace de noms na

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


Espace de noms NB

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


Utilisation de l'espace de noms NA;
int myvar0 = varint;
// d'autres objets et fonctions de :: et nb suivent.
int fn ()
int myvar1 = varint;
Utilisation de l'espace de noms NB;
int myvar2 = nb :: func ();
// D'autres objets et fonctions de NB suivent, jusqu'à la fin de cette portée.
retourner myvar1 + myvar2;

// uniquement des objets et des fonctions de :: et nb suivent.
int myvar3 = nb :: func ();
int main()
couter << myVar0 << " <<
fn () << " << myVar3 <<
'\ n';
retour 0;

La sortie est 6, 13, 7.

Note: L'espace de noms global est indiqué par :: , ce qui signifie qu'il n'y a rien avant l'opérateur de résolution de portée qui suit.

Sous la déclaration, le «Utilisation de l'espace de noms NA;»Les variables des espaces de noms globaux et NA peuvent être utilisés sans indication de leur espace de noms source. La déclaration suivante utilise le variante de l'espace de noms NA. La région d'espace de noms combiné mondial et NA s'étend dans le fn () Espace de noms de fonction. Alors le variante de la première déclaration dans le fn () Portée de la fonction, est de l'espace de noms NA.

Puisque la région des espaces de noms mondiaux et NA s'étend tout au long fn () Portée, après le «int myvar2 = nb :: func ();,«Tout nom de l'espace de noms NB ne peut être utilisé que dans le fn () Portée sans la précéder avec "NB ::,«Seulement si cela ne s'est pas produit dans les espaces de noms NA et globaux (blocs). Sinon, il devrait être précédé de «NB ::.»La région des espaces de noms combinés pour NA et Global continuent en dessous du fn () définition et dans le principal() fonction jusqu'à la fin du fichier.

L'extension de l'espace de noms NB commence à partir de «int myvar2 = nb :: func ();" dans le fn () bloc et se termine à la fin du fn () bloc de définition.

Note: Les espaces de noms dont les régions sont jointes ne devraient pas avoir le même nom de variable dans leurs différents blocs d'espace de noms, car cela entraînerait toujours un conflit.

Régions de l'espace de noms

Un espace de noms est une portée. En dehors de l'espace de noms mondial (portée mondiale), tout espace de noms doit être déclaré dans un bloc. Ce bloc est la première partie des régions éventuellement distribuées de l'espace de noms. Avec la directive d'utilisation, l'espace de noms peut être étendu en tant que régions d'autres lunettes.

Les entités déclarées dans un corps d'espace de noms seraient membres de l'espace de noms, et les noms introduits par ces déclarations dans la région déclarative de l'espace de noms seraient des noms de membre de l'espace de noms.

Espaces de noms imbriqués

Le programme suivant affiche des espaces de noms imbriqués:

#inclure
Utilisation de Namespace Std;
Espace de noms a
int i = 1;
espace de noms b
int i = 2;
Espace de noms C
int i = 3;



int main()

couter << A::i << " <<
A :: B :: I << " <<
A :: B :: C :: I << '\n';
retour 0;

La sortie est:

1 2 3

Notez que les trois valeurs ont été accessibles à l'aide de l'opérateur de résolution de portée.

Espace de noms standard

C ++ a une bibliothèque appelée la bibliothèque standard. Les noms des objets, des fonctions et d'autres entités de cette bibliothèque proviennent d'un espace de noms appelé l'espace de noms standard, écrit comme MST. La bibliothèque standard contient des sous-bibliothèques, et l'une de ces sous-bibliothèques est iostream. Le iostream La bibliothèque contient l'objet couter, qui est utilisé pour envoyer des résultats à la console (terminal).

Le nom couter doit être dans le MST espace de noms. Utiliser iostream avec son MST Espace de noms, le programme devrait être le suivant:

#inclure
Utilisation de Namespace Std;

Notez l'utilisation du en utilisant directive et MST. Le terme "#inclure "Est une directive préprocesseur et ne se termine pas par un point-virgule. Il comprend le «fichier» iOStream à la position de sa directive.

Conclusion

Un espace de noms est une portée. La description de l'espace de noms (définition) contient des déclarations de base et / ou des définitions d'objets, fonctions et autres entités C ++. En dehors de la définition de l'espace de noms, le nom est accessible avec la syntaxe, «namespacename :: nom.»En dehors de l'espace de noms mondial (portée mondiale), tout espace de noms doit être déclaré dans un bloc. Ce bloc est la première partie des régions éventuellement distribuées de l'espace de noms. Avec le en utilisant Directive, l'espace de noms peut être étendu en tant que régions d'autres lunettes. Les espaces de noms dont les régions sont jointes ne devraient pas avoir le même nom de variable dans leurs différents blocs d'espace de noms, car cela entraînerait toujours un conflit de nom.