Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Espacios de nombres en C++

Considere una situación, cuando tenemos dos personas con el mismo nombre, Zara, en la misma clase. Siempre que necesitemos diferenciarlos definitivamente, tendríamos que usar alguna información adicional junto con su nombre, como el área, si viven en un área diferente o el nombre de su madre o padre, etc.

La misma situación puede surgir en sus aplicaciones C++. Por ejemplo, podría estar escribiendo un código que tiene una función llamada xyz() y hay otra biblioteca disponible que también tiene la misma función xyz(). Ahora el compilador no tiene forma de saber a qué versión de la función xyz() te refieres dentro de tu código.

Un espacio de nombres está diseñado para superar esta dificultad y se utiliza como información adicional para diferenciar funciones, clases, variables, etc. similares con el mismo nombre disponible en diferentes bibliotecas. Con el espacio de nombres, puede definir el contexto en el que se definen los nombres. En esencia, un espacio de nombres define un ámbito.

Definir un espacio de nombres

Una definición de espacio de nombres comienza con la palabra clave espacio de nombres seguido del nombre del espacio de nombres de la siguiente manera −

namespace namespace_name {
   // code declarations
}

Para llamar a la versión habilitada para el espacio de nombres de una función o variable, anteponga (::) el nombre del espacio de nombres de la siguiente manera −

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

Veamos cómo el espacio de nombres abarca las entidades que incluyen variables y funciones −

Demostración en vivo
#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 compilamos y ejecutamos el código anterior, esto produciría el siguiente resultado −

Inside first_space
Inside second_space

La directiva de uso

También puede evitar la anteposición de espacios de nombres con using namespace directiva. Esta directiva le dice al compilador que el código subsiguiente está haciendo uso de nombres en el espacio de nombres especificado. Por lo tanto, el espacio de nombres está implícito para el siguiente código −

Demostración en vivo
#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 compilamos y ejecutamos el código anterior, esto produciría el siguiente resultado −

Inside first_space

La directiva 'usando' también se puede usar para referirse a un elemento en particular dentro de un espacio de nombres. Por ejemplo, si la única parte del espacio de nombres estándar que pretende usar es cout, puede hacer referencia a él de la siguiente manera:

using std::cout;

El código subsiguiente puede hacer referencia a cout sin anteponer el espacio de nombres, pero otros elementos en el std el espacio de nombres aún deberá ser explícito de la siguiente manera −

Demostración en vivo
#include <iostream>
using std::cout;

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

Si compilamos y ejecutamos el código anterior, esto produciría el siguiente resultado −

std::endl is used with std!

Nombres introducidos en un using la directiva obedece las reglas normales de alcance. El nombre es visible desde el punto de uso directiva hasta el final del ámbito en el que se encuentra la directiva. Las entidades con el mismo nombre definidas en un ámbito externo están ocultas.

Espacios de nombres no contiguos

Un espacio de nombres se puede definir en varias partes, por lo que un espacio de nombres se compone de la suma de sus partes definidas por separado. Las partes separadas de un espacio de nombres se pueden distribuir en varios archivos.

Por lo tanto, si una parte del espacio de nombres requiere un nombre definido en otro archivo, ese nombre aún debe declararse. Escribir una definición de espacio de nombres siguiente define un nuevo espacio de nombres o agrega nuevos elementos a uno existente −

namespace namespace_name {
   // code declarations
}

Espacios de nombres anidados

Los espacios de nombres se pueden anidar donde puede definir un espacio de nombres dentro de otro espacio de nombres de la siguiente manera −

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

Puede acceder a los miembros del espacio de nombres anidado mediante el uso de operadores de resolución de la siguiente manera −

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

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

En las declaraciones anteriores, si está utilizando namespace_name1, entonces hará que los elementos de namespace_name2 estén disponibles en el alcance de la siguiente manera −

Demostración en vivo
#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 compilamos y ejecutamos el código anterior, esto produciría el siguiente resultado −

Inside second_space

Lenguaje C

  1. Operadores de C++
  2. Comentarios de C++
  3. Plantillas de clase de C++
  4. Descripción general de C++
  5. Constantes/Literales de C++
  6. Operadores en C++
  7. Números en C++
  8. Referencias de C++
  9. Espacios de nombres en C++
  10. Plantillas C++
  11. Preprocesador C++