Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Espaces de noms en C++

Considérez une situation où nous avons deux personnes portant le même nom, Zara, dans la même classe. Chaque fois que nous avons besoin de les différencier, nous devons utiliser des informations supplémentaires avec leur nom, comme la région, s'ils vivent dans une région différente ou le nom de leur mère ou de leur père, etc.

La même situation peut survenir dans vos applications C++. Par exemple, vous pourriez être en train d'écrire du code qui a une fonction appelée xyz() et il existe une autre bibliothèque disponible qui a également la même fonction xyz(). Désormais, le compilateur n'a aucun moyen de savoir à quelle version de la fonction xyz() vous faites référence dans votre code.

Un espace de noms est conçu pour surmonter cette difficulté et est utilisé comme information supplémentaire pour différencier des fonctions, classes, variables similaires, etc. avec le même nom disponibles dans différentes bibliothèques. À l'aide de l'espace de noms, vous pouvez définir le contexte dans lequel les noms sont définis. Essentiellement, un espace de noms définit une portée.

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 −

namespace namespace_name {
   // code declarations
}

Pour appeler la version compatible avec l'espace de noms de la fonction ou de la variable, ajoutez (::) le nom de l'espace de noms comme suit −

name::code;  // code could be variable or function.

Voyons comment l'espace de noms couvre les entités, y compris les variables et les fonctions −

Démo en direct
#include <iostream>
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;
   }
}

int main () {
   // Calls function from first name space.
   first_space::func();
   
   // Calls function from second name space.
   second_space::func(); 

   return 0;
}

Si nous compilons et exécutons le code ci-dessus, cela produirait le résultat suivant −

Inside first_space
Inside second_space

La directive using

Vous pouvez également éviter de préfixer les espaces de noms avec l'espace de noms using directif. 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 −

Démo en direct
#include <iostream>
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;
}

Si nous compilons et exécutons le code ci-dessus, cela produirait le résultat suivant −

Inside first_space

La directive « using » peut également être utilisée pour faire référence à un élément particulier dans un espace de noms. Par exemple, si la seule partie de l'espace de noms std que vous avez l'intention d'utiliser est cout, vous pouvez vous y référer comme suit −

using std::cout;

Le code suivant peut faire référence à cout sans préfixer l'espace de noms, mais d'autres éléments dans le std l'espace de noms devra toujours être explicite comme suit −

Démo en direct
#include <iostream>
using std::cout;

int main () {
   cout << "std::endl is used with std!" << std::endl;
   
   return 0;
}

Si nous compilons et exécutons le code ci-dessus, cela produirait le résultat suivant −

std::endl is used with std!

Noms introduits dans un usage directive obéissent aux règles de portée normales. Le nom est visible depuis le point d'utilisation directive jusqu'à la fin du domaine d'application dans lequel 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 discontinus

Un espace de noms peut être défini en plusieurs parties et ainsi un espace de noms est composé de la somme de ses parties définies séparément. Les parties distinctes d'un espace de noms peuvent être réparties sur plusieurs fichiers.

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é. L'écriture d'une définition d'espace de noms suivante définit soit un nouvel espace de noms, soit ajoute de nouveaux éléments à un existant −

namespace namespace_name {
   // code declarations
}

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 −

namespace namespace_name1 {
   // code declarations
   namespace namespace_name2 {
      // code declarations
   }
}

Vous pouvez accéder aux membres de l'espace de noms imbriqué en utilisant les opérateurs de résolution comme suit −

// to access members of namespace_name2
using namespace namespace_name1::namespace_name2;

// to access members of namespace:name1
using namespace namespace_name1;

Dans les déclarations ci-dessus, si vous utilisez namespace_name1, les éléments de namespace_name2 seront disponibles dans la portée comme suit −

Démo en direct
#include <iostream>
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;
}

Si nous compilons et exécutons le code ci-dessus, cela produirait le résultat suivant −

Inside second_space

Langue C

  1. Opérateurs C++
  2. Commentaires C++
  3. Modèles de classe C++
  4. Présentation de C++
  5. Constantes/littéraux C++
  6. Opérateurs en C++
  7. Les nombres en C++
  8. Références C++
  9. Espaces de noms en C++