Latest web development tutorials

C de l'espace de noms

Imaginez une situation où il y a une classe nommée Zara deux étudiants, afin de distinguer clairement entre eux, nous utilisons le nom en dehors, a dû utiliser des informations supplémentaires, telles que leur adresse de domicile ou de leurs parents nom, etc.

La même situation apparaît également dans l'application C ++. Par exemple, vous pourriez écrire une fonction xyz nommée (), dans une autre bibliothèque disponible il y a aussi un même xyz de fonction (). Ainsi, le compilateur ne peut pas déterminer ce que vous utilisez une fonction de xyz ().

Par conséquent, l'introduction de la notion denamespaces, conçu pour résoudre les problèmes ci - dessus, il peut être utilisé comme complément d' information pour distinguer les différentes bibliothèques avec les mêmes fonctions de noms, les classes, les variables, et ainsi de suite.Utilisation de l'espace de noms qui est défini contexte. En substance, l'espace de noms est la définition d'une gamme.

Définition de namespaces

Défini namespace mot - clénamespace, suivi du nom de l'espace de noms, comme suit:

namespace namespace_name {
   // 代码声明
}

Pour appeler une fonction ou variable avec un espace de noms, vous devez le faire précéder le nom de l'espace de noms, comme suit:

name::code;  // code 可以是变量或函数

Voyons comment la définition d'espace de noms pour l'entité et autre fonction variable ou:

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二个命名空间
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
int main ()
{
 
   // 调用第一个命名空间中的函数
   first_space::func();
   
   // 调用第二个命名空间中的函数
   second_space::func(); 

   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Inside first_space
Inside second_space

en utilisant l'instruction

Vous pouvez utiliser la directived'espace de noms à l' aide,de sorte que lorsque vous ne pouvez pas utiliser un espace de noms préfixé avec le nom d'espace de noms. Cette directive indique au compilateur que le code qui suit va utiliser le nom d'espace de noms spécifié.

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// 第二个命名空间
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
using namespace first_space;
int main ()
{
 
   // 调用第一个命名空间中的函数
   func();
   
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Inside first_space

en utilisant des instructions peuvent également être utilisés pour spécifier les éléments spécifiques d'espace de noms. Par exemple, si vous ne l'intention d'utiliser la section espace de noms std coutisme, vous pouvez utiliser la déclaration suivante:

using std::cout;

Code lors de l' utilisation ultérieure coutisme vous ne pouvez pas ajouter le nom d'espace de noms comme préfixe, mais lesstd espace de noms d' autres éléments ont encore besoin d'ajouter le nom d'espace de noms comme préfixe, comme suit:

#include <iostream>
using std::cout;

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

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

std::endl is used with std!

Nom enutilisant des instructions introduites suivre les règles de portée normales.Les nomsd'une directive usinginitialement visible jusqu'à la fin de la plage. Dans ce cas, le même nom en dehors de la portée de la définition des entités qui est caché.

espace de noms discontinus

Namespace peut être défini dans plusieurs parties différentes, de sorte que l'espace de noms est composé de plusieurs parties définies séparément composition. Divers éléments d'un espace de noms peuvent être répartis sur plusieurs fichiers.

Par conséquent, si la partie d'espace de noms de la nécessité de demander un nom défini dans un autre fichier, vous devez toujours déclarer le nom. La définition d'espace de noms suivant peut définir un nouvel espace de noms, il peut être un espace de noms existant pour ajouter de nouveaux éléments:

namespace namespace_name {
   // 代码声明
}

namespaces emboîtées

Namespaces peuvent être imbriquées, vous pouvez définir un autre espace de noms dans un espace de noms, comme suit:

namespace namespace_name1 {
   // 代码声明
   namespace namespace_name2 {
      // 代码声明
   }
}

Vous pouvez utiliser le :: opérateur pour accéder aux membres d'espace de noms imbriqués:

// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;

// 访问 namespace:name1 中的成员
using namespace namespace_name1;

Dans la déclaration ci-dessus, si vous utilisez namespace_name1, puis au sein de la gamme d'éléments namespace_name2 également disponible comme suit:

#include <iostream>
using namespace std;

// 第一个命名空间
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
   // 第二个命名空间
   namespace second_space{
      void func(){
         cout << "Inside second_space" << endl;
      }
   }
}
using namespace first_space::second_space;
int main ()
{
 
   // 调用第二个命名空间中的函数
   func();
   
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Inside second_space