Exood4 Studio - Video Game Development, Toulouse (France)
Exood4 Studios Exood4 Tutorials

   
L a n g a g e   C++

L e s   e s p a c e s   d e   n o m m a g e






 Dans un programme, les fonctions globales, les variables globales et les classes sont placs de faon implicite dans un espace de nommage global. Le mot-cl static permet de rendre locale une variable ou une fonction. Mais dans un grand projet, le manque de contrle de l'espace de nommage global peut causer des problmes.

 Comme alternative cela, les fabriquants (de librairies etc...) crent des noms longs et compliqus pour ne pas risquer d'entrer en conflit de nommage, mais nous sommes alors obligs d'utiliser et d'crire ces noms longs dans nos programmes. typedef est souvent utilis pour simplifier cela, mais ce n'est pas une solution lgante.

 Il est possible de subdiviser l'espace de nommage global en plusieurs sous espaces en utilisant la commande namespace du C ++. Le mot-cl namespace, semblable class, struct, enum et union, met les noms de ses membres dans un espace distinct. Bien que les autres mots-cls soient complmentaires, la cration d'un nouvel espace de nommage est la seule utilisation possible pour namespace.


Cration d'un espace de nommage


 La cration d'un espace de nommage est trs similaire la cration d'une classe :

namespace MonEspace
{
 // Dclarations
}

 Ceci produit un nouvel espace de nommage contenant les dclarations situes entre les accolades. Toute variable, fonction, classe etc... dclare dans un espace de nommage sera alors accessible en utilisant l'oprateur de rsolution de porte ::


Exemple :

namespace MonEspace
{
 int a, b, c;
}

int a;

void main ()
{
 a = 1; // la variable a globale reoit la valeur 1

 MonEspace::a = 2; // la variable a de l'espace de nommage MonEspace reoit 2
}

 Une autre solution consiste utiliser le mot-cl using :

namespace MonEspace
{
 int a, b, c;
}

using namespace MonEspace;

void main ()
{
 a = 2; // la variable a de l'espace de nommage MonEspace reoit 2
}

Attention aux ambiguts lors de la compilation en utilisant using, toute dclaration contenue dans l'espace de nommage est alors susceptible d'entrer en conflit avec les dclarations globales du programme. A n'utiliser que dans un fichier d'implmentation (cpp) !

 Il y a des diffrences importantes par rapport class et struct :
  • Un espace de nommage peut uniquement tre dfini en global ou l'intrieur d'un autre espace de nommage

  • Il n'y a pas de point-virgule la fin de la dclaration d'un espace de nommage (aprs l'accolade)

  • La dfinition d'un espace de nommage peut se dclarer en plusieurs parties :

    namespace MonEspace
    {
     int a, b, c;
    }

    ...

    namespace MonEspace
    {
     int d; // la dclaration de d se rajoute l'espace MonEspace dfini plus haut
    }


  • Il est possible de renommer un espace de nommage pour ne pas avoir retaper un ventuel nom d'espace trop long :

    namespace Ceci_est_un_exemple_d_espace_de_noms // un peu trop long ...
    {
     ...
    }

    namespace nom_court = Ceci_est_un_exemple_d_espace_de_noms;


  • Contrraitement aux classes il est impossible de crer une instance d'un espace de nommage.


Les espaces de nommage sans identifiant


 Les espaces de nommage peuvent tre dclars sans identifiant, dans ce cas toute dclaration contenue dans cet espace sera considre comme locale au fichier dans lequel il est dfini. L'oprateur de rsolution de porte :: ne peut plus tre utilis.


Exemple :

namespace // quivalent dclarer static int a, b, c;
{
 int a, b, c;
}

void main ()
{
 a = 1; // a, b et c sont directement accessibles dans le module
 b = c = 2; // contenant la dclaration de l'espace de nommage
}



  Retour en haut de page