Espacio de nombres en C++ | Conjunto 1 (Introducción) Espacio de nombres en C++ | Conjunto 2 (espacio de nombres extendido y espacio de nombres sin nombre)
Diferentes formas de acceder al espacio de nombres: En C++ hay dos formas de acceder a variables y funciones del espacio de nombres.
Definiendo un espacio de nombres:
Una definición de espacio de nombres comienza con la palabra clave espacio de nombres seguida del nombre del espacio de nombres de la siguiente manera:
namespace namespace_name
{
// code declarations i.e. variable (int a;)
method (void add();)
classes ( class student{};)
}
Cabe señalar que no hay punto y coma (;) después de la llave de cierre.
Para llamar a la versión habilitada para espacios de nombres de una función o variable, anteponga el nombre del espacio de nombres de la siguiente manera:
nombre_espacio_nombre: :código; // el código podría ser una función o clase variable.
La directiva de uso:
También puede evitar anteponer espacios de nombres con la directiva de espacio de nombres. Esta directiva le dice al compilador que el código posterior utiliza nombres en el espacio de nombres especificado.
Por tanto, el espacio de nombres está implícito en el siguiente código:
#include 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; }
Los nombres introducidos en una directiva de uso obedecen a reglas de alcance normales. El nombre es visible desde el punto de la directiva de uso hasta el final del alcance en el que se encuentra la directiva. Las entidades con el mismo nombre definidas en un ámbito externo están ocultas.
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 utilizando operadores de resolución de la siguiente manera:
// para acceder a los miembros de namespace_name2
usando el espacio de nombres namespace_name1::namespace_name2;
// para acceder a los miembros del espacio de nombres:nombre1
usando el espacio de nombres namespace_name1;
En las declaraciones anteriores, si está utilizando namespace_name1, los elementos de namespace_name2 estarán disponibles en el alcance de la siguiente manera:
#include 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; }
1. forma normal
CPP// C++ program to demonstrate accessing of variables // in normal way i.e. using '::' #include using namespace std; namespace geek { int rel = 300; } int main() { // variable ‘rel’ accessed // using scope resolution operator cout << geek::rel << "n"; // prints 300 return 0; }
Producción :
300
2. directiva 'usando'
CPP// C++ program to demonstrate accessing of variables // in normal way i.e. using 'using' directive #include using namespace std; namespace geek { int rel = 300; } // use of ‘using’ directive using namespace geek; int main() { // variable ‘rel’ accessed // without using scope resolution variable cout << rel << "n"; //prints 300 return 0; }
Producción:
300
Usar espacio de nombres en archivos de encabezado Podemos crear un espacio de nombres en un archivo y acceder al contenido usando otro programa. Esto se hace de la siguiente manera.
- Necesitamos crear dos archivos. Uno que contiene el espacio de nombres y todos los miembros de datos y funciones miembro que queremos usar más adelante.
- Y el otro programa puede llamar directamente al primer programa para utilizar todos los miembros de datos y funciones miembro que contiene.
Archivo 1
CPP// file1.h namespace foo { int value() { return 5; } }
Archivo 2
CPP// file2.cpp - Not to be executed online #include #include file1.h // Including file1 using namespace std; int main () { cout << foo::value(); return 0; }
Aquí podemos ver que el espacio de nombres se crea en file1.h y el valor() de ese espacio de nombres se llama en file2.cpp. Espacios de nombres anidados En C++, los espacios de nombres también se pueden anidar, es decir, un espacio de nombres dentro de otro. La resolución de las variables del espacio de nombres es jerárquica.
CPP// C++ program to demonstrate nesting of namespaces #include using namespace std; // Nested namespace namespace out { int val = 5; namespace in { int val2 = val; } } // Driver code int main() { cout << out::in::val2; // prints 5 return 0; }
PRODUCCIÓN :
5
Alias de espacio de nombres: En C++ puede utilizar un nombre de alias para el nombre de su espacio de nombres para facilitar su uso. Los espacios de nombres existentes pueden tener alias con nombres nuevos con la siguiente sintaxis:
namespace new_name = current_name;CPP
#include namespace name1 { namespace name2 { namespace name3 { int var = 42; } } } // Aliasing namespace alias = name1::name2::name3; int main() { std::cout << alias::var << 'n'; }
Producción :
42
Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando escribir.geeksforgeeks.org o envíe su artículo por correo a [email protected]. Vea que su artículo aparezca en la página principal de GeeksforGeeks y ayude a otros Geeks.