Espacio de nombres C ++

C Namespace



Un espacio de nombres en C ++ es un ámbito generalizado. Su declaración comienza con la palabra reservada, espacio de nombres, seguida de un nombre elegido por el programador y luego el bloque entre llaves. El bloque contiene declaraciones y / o definiciones básicas de objetos, funciones y otras entidades de C ++.

Considere las siguientes dos declaraciones escalares en un ámbito global, en el siguiente programa:







#incluir
usando el espacio de nombres std;

En tvarId= 5;
flotadorvarId= 2.3;

En tprincipal()
{

regreso 0;
}

Un intento de compilar este programa conduce a un error de compilación. Hay dos variables con el mismo nombre, varId . Aunque son dos variables diferentes de dos tipos diferentes, En t y flotador , el compilador rechaza las dos declaraciones porque tienen el mismo nombre. El siguiente programa resuelve este problema declarando las variables con el mismo nombre en dos ámbitos generalizados diferentes:



#incluir
usando el espacio de nombres std;

espacio de nombres NA
{
En tvarId= 5;
}

espacio de nombres NB
{
flotadorvarId= 2.3;
}

En tprincipal()
{
costo<<N / A::varId << ' orte';
costo<<nótese bien::varId << ' orte';

regreso 0;
}

El resultado es el siguiente:



5
2.3

Hay dos espacios de nombres en el programa anterior: N / A , que tiene la definición de un número entero, y nótese bien , que tiene la definición de un flotante pero con el mismo nombre que el número entero de NA. Finalmente, cuando se ejecutó el programa, se utilizó el mismo nombre para dos variables diferentes. Tenga en cuenta que para acceder al mismo nombre de dos variables diferentes, se debe utilizar el nombre particular del espacio de nombres, seguido del identificador común. El nombre del espacio de nombres y el identificador común están separados por el operador de resolución de alcance, :: . El nombre de los espacios de nombres diferenciará los objetos.





Este artículo cubre el concepto básico de un espacio de nombres y su uso en el lenguaje de programación C ++. Para seguir este artículo, debe tener un conocimiento básico del lenguaje C ++. También debe tener conocimiento del alcance de C ++, aunque se explica brevemente en este artículo. Para obtener más información sobre el alcance de C ++, busque la frase Alcance en C ++ (sin comillas) en el cuadro de búsqueda de cualquier página web linuxhint.com y presione Entrar. Esto lo llevará al artículo que escribió este autor.

Contenido del artículo

¿Qué es un espacio de nombres?

Una región declarativa es la parte más grande de un programa en la que el nombre de una entidad (variable) es válido. Esta región se llama ámbito. Un espacio de nombres en C ++ es un ámbito generalizado cuyo propósito principal es resolver conflictos de nombres. Un espacio de nombres tiene declaraciones básicas y / o definiciones de entidades.



Espacio de nombres global y su problema

El espacio de nombres global es el ámbito global. Considere el siguiente programa corto:

#incluir
usando el espacio de nombres std;

En tident= 55;
flotadorident= 12.17;

En tprincipal()
{

regreso 0;
}

En el programa anterior, hay dos variables, ambas llamadas ident . Estas variables están en el ámbito global; es decir, están en el espacio de nombres global. Un intento de compilar este programa fallará con un mensaje de error. El ámbito global no acepta más de una variable con el mismo nombre, por lo que es necesario un espacio de nombres personalizado.

Espacio de nombres personalizado

Un espacio de nombres no tiene un solo nombre. En cambio, un espacio de nombres tiene un conjunto de nombres para evitar conflictos con otros conjuntos de nombres. Para evitar conflictos en la parte inferior del código, preceda cada nombre con el nombre del espacio de nombres y :: . El siguiente programa ilustra esto usando dos espacios de nombres personalizados:

#incluir
usando el espacio de nombres std;

espacio de nombres NA
{
En tvariante= 6;
flotadorflt;
}

espacio de nombres NB
{
En tvariante= 7;
flotadorflt;
}

En tprincipal()
{
costo<<N / A::variante << ' orte';
costo<<nótese bien::variante << ' orte';
N / A::flt = 2.5;
nótese bien::flt = 4.8;
costo<<N / A::flt << ' orte';
costo<<nótese bien::flt << ' orte';

regreso 0;
}

La salida es:

6
7
2.5
4.8

Tenga en cuenta que los nombres NA :: flt y NB :: flt han sido finalmente definidos en el principal() función. C ++ no permite tal definición en el ámbito global.

Tenga en cuenta que el espacio de nombres personalizado es un espacio de nombres anidado para el espacio de nombres global.

La Directiva de uso

Para evitar escribir el espacio de nombres :: nombre todo el tiempo en lugar de solo el nombre después de declarar el espacio de nombres, puede usar el utilizando directiva. La sintaxis para usar utilizando directiva es la siguiente:

usando el espacio de nombres Namespace_name;

los utilizando La directiva no es una directiva de preprocesador, por lo que termina con un punto y coma (;).

El siguiente programa ilustra el uso de la utilizando directiva y más:

#incluir
usando el espacio de nombres std;

espacio de nombres NB
{
En tvariante= 7;
En tfunción()
{
regresovariante;
}
}

En tfn()
{
usando el espacio de nombres NB;
En tmyVar2=función();
// Siguen otros objetos y funciones de NB.
regresomyVar2;
}

En tmyVar3=nótese bien::función();

En tprincipal()
{
costo<<fn() << ' ' <<myVar3<< ' orte';

regreso 0;
}

La salida de este programa es 7 7 . El término utilizando el espacio de nombres NB; se ha colocado al principio de la fn () definición. los func () desde el espacio de nombres NB se llama justo debajo de eso, sin preceder con NÓTESE BIEN:: .

Una variable declarada en el ámbito global (espacio de nombres global) se ve desde el punto de declaración hasta el final del archivo. También se ve en los espacios de nombres anidados (ámbitos anidados), como los fn () alcance de la función anterior. los utilizando La directiva une su espacio de nombres desde la posición en la que se coloca hasta el final del ámbito en el que se coloca.

El nombre func () del espacio de nombres NB no se puede ver debajo del fn () definición porque utilizando el espacio de nombres NB; se colocó dentro del alcance de la función (bloque). Bajo esta condición, usar func () fuera del bloque de espacio de nombres NB (alcance), debe estar precedido por NÓTESE BIEN:: , como en la siguiente declaración:

En tmyVar3=nótese bien::función();

los utilizando La directiva une su espacio de nombres con el espacio de nombres de anidamiento externo desde la posición en la que se coloca hasta el final del espacio de nombres de anidamiento externo. En el siguiente programa, el espacio de nombres NA se une al espacio de nombres global. Ambos espacios de nombres se extienden luego al fn () espacio de nombres de definición de función, en el que se unen con el espacio de nombres NB. El espacio de nombres NB termina al final del fn () definición de función, y los dos espacios de nombres anteriores continúan hasta el final del archivo (lea el código).

#incluir
usando el espacio de nombres std;

espacio de nombres NA
{
En tvariante= 6;
En tfunción()
{
regresovariante;
}

}

espacio de nombres NB
{
En tvariante= 7;
En tfunción()
{
regresovariante;
}
}

usando el espacio de nombres NA;
En tmyVar0=variante;
// Siguen otros objetos y funciones de :: y NB.

En tfn()
{
En tmyVar1=variante;
usando el espacio de nombres NB;
En tmyVar2=nótese bien::función();
// Siguen otros objetos y funciones de NB, hasta el final de este alcance.
regresomyVar1+myVar2;
}

// Solo le siguen los objetos y funciones de :: y NB.

En tmyVar3=nótese bien::función();

En tprincipal()
{
costo<<myVar0<< ' ' <<fn() << ' ' <<myVar3<< ' orte';

regreso 0;
}

La salida es 6, 13, 7 .

Nota: El espacio de nombres global se indica con :: , lo que significa que no hay nada antes del operador de resolución de alcance que sigue.

Debajo de la declaración, el usando el espacio de nombres NA; las variables de los espacios de nombres global y NA se pueden utilizar sin una indicación de su espacio de nombres de origen. La siguiente declaración usa el variante del espacio de nombres NA. La región de espacio de nombres combinada global y NA se extiende a la fn () espacio de nombres de función. Entonces el variante de la primera declaración en el fn () alcance de la función, es del espacio de nombres NA.

Dado que la región para los espacios de nombres global y NA se extiende a lo largo del fn () alcance, después de la int myVar2 = NB :: func (); , cualquier nombre del espacio de nombres NB solo se puede utilizar en el fn () alcance sin precederlo con NÓTESE BIEN:: , solo si no ocurrió en NA y en los espacios de nombres globales (bloques). De lo contrario, debe ir precedido de NÓTESE BIEN:: . La región de los espacios de nombres combinados para NA y global continúa debajo de la fn () definición y en el principal() función hasta el final del archivo.

La extensión del espacio de nombres NB comienza en int myVar2 = NB :: func (); en el fn () bloque y termina al final del fn () bloque de definición.

Nota: Los espacios de nombres cuyas regiones están unidas no deben tener el mismo nombre de variable en sus diferentes bloques de espacios de nombres, ya que esto aún causaría conflictos.

Regiones del espacio de nombres

Un espacio de nombres es un ámbito. Aparte del espacio de nombres global (alcance global), cualquier espacio de nombres debe declararse en un bloque. Ese bloque es la primera parte de las regiones posiblemente distribuidas del espacio de nombres. Con la directiva using, el espacio de nombres se puede extender como regiones en otros ámbitos.

Se dice que las entidades declaradas en un cuerpo de espacio de nombres son miembros del espacio de nombres, y los nombres introducidos por estas declaraciones en la región declarativa del espacio de nombres se dice que son nombres de miembros del espacio de nombres.

Espacios de nombres anidados

El siguiente programa muestra espacios de nombres anidados:

#incluir
usando el espacio de nombres std;

espacio de nombres A
{
En tI= 1;
espacio de nombres B
{
En tI= 2;
espacio de nombres C
{
En tI= 3;
}
}
}

En tprincipal()
{
costo<<A::I << ' ' <<A::B::I << ' ' <<A::B::C::I << ' orte';

regreso 0;
}

La salida es:

1 2 3

Observe que se ha accedido a los tres valores mediante el operador de resolución de alcance.

Espacio de nombres estándar

C ++ tiene una biblioteca llamada biblioteca estándar. Los nombres de los objetos, funciones y otras entidades de esta biblioteca son de un espacio de nombres llamado espacio de nombres estándar, escrito como horas . La biblioteca estándar contiene subbibliotecas, y una de estas subbibliotecas es iostream . los iostream la biblioteca contiene el objeto costo , que se utiliza para enviar resultados a la consola (terminal).

El nombre costo debe estar en el horas espacio de nombres. Usar iostream con su horas espacio de nombres, el programa debe ser el siguiente:

#incluir
usando el espacio de nombres std;

Tenga en cuenta el uso de la utilizando directiva y horas . El término #incluir es una directiva de preprocesador y no termina con un punto y coma. Incluye el archivo iostream en la posición de su directiva.

Conclusión

Un espacio de nombres es un ámbito. La descripción del espacio de nombres (definición) contiene declaraciones básicas y / o definiciones de objetos, funciones y otras entidades de C ++. Fuera de la definición del espacio de nombres, se puede acceder al nombre con la sintaxis, namespaceName :: nombre . Aparte del espacio de nombres global (alcance global), cualquier espacio de nombres debe declararse en un bloque. Ese bloque es la primera parte de las regiones posiblemente distribuidas del espacio de nombres. Con el utilizando directiva, el espacio de nombres se puede extender como regiones en otros ámbitos. Los espacios de nombres cuyas regiones están unidas no deben tener el mismo nombre de variable en sus diferentes bloques de espacios de nombres, ya que esto aún causaría un conflicto de nombres.

Chrys