Espacios de nombres

Un espacio de nombre es un concepto muy básico y simple: es un ámbito. Por lo tanto, los ámbitos locales y los globales son espacios de nombres. No obstante, aunque los nombres puedan pertenecer a funciones o a clases, los nombres de funciones globales, los nombres de clases o los nombres de variables globales pertenecen todavía a un único espacio de nombres global. Si tenemos un gran proyecto, la falta de control sobre estos nombres nos puede causar problemas. Para prevenir estos problemas, es posible subdividir el espacio de nombres global en espacios personalizados utilizando la palabra reservada namespace.

Para crear un espacio de nombres:

namespace_1

Esto produce un espacio de nombres que empaqueta las declaraciones especificadas en el bloque definido. No hace falta poner el punto y coma (;) al final de la llave de cierre. En resumen namespace declara un zona concreta para variables, objetos, etc.

espace_1

Los espacios de nombres pueden aparecer solamente en un ámbito global. Por ejemplo:

espace_2

Un espacio de nombres puede estar definido en varios ficheros de cabecera. Por ejemplo:

espace_3

También es posible declarar un alias de un espacio de nombres:

espacio_5

En las bibliotecas de clases, los espacios de nombres se utilizan también con frecuencias para empaquetar clases relacionadas entre sí de alguna forma, o bien simplemente para incluir a otros espacios de nombres.

espace_4

Para referirnos a un elemento de un espacio de nombres, tenemos que hacerlo utilizando su nombre completo, excepto cuando el espacio de nombres haya sido declarado explícitamente, como veremos a continuación. Por ejemplo, System::Windoww::Forms::C hace referencia a la clase C del espacio de nombres System::Windows::Forms.

Toda la biblioteca estándar de C++ está definida en un único espacio de nombres llamado std (estándar).

 Directriz using

Un programa puede hacer referencia a un nombre de un espacio de nombres de dos formas:

  1. Utilizando como prefijo el nombre del espacio en todas las partes del código donde haya que referirse a él. Así, para referirnos a cout y endl de std y a x de LibXXX escribiríamos:nombres_1
  2. Indicando al compilador el espacio de nombres donde está el nombre referenciado, lo que posibilita referirse a él sin el nombre de su espacio. Para ello utilizaremos la directriz using. Por ejemplo:espace_2

Podemos comprobar en el ejemplo anterior que declarar un espacio de nombres, permite al programa, referirse a sus nombres más tarde sin utilizar el nombre del espacio. esto es, la directriz using sólo indica al compilador C++ donde encontrar los nombres, no coje nada dentro del programa C++ actual. Si eliminamos la directriz using namespace std, el compilador mostrará errores ya que no podrá encontrar los nombres cout y endl.

La expresión using namespace miespacio hace referencia a todos los elementos del espacio de nombres miespacio. Para permitir el uso de la variable x de LibXXX, usaríamos la declaración using de la siguiente manera:

nombres_4

Una declaración using añade un nombre a un ámbito local; una directriz using no, simplemente hace accesibles los nombres de un espacio de nombres.

La directriz using puede utilizarse también dentro de un bloque (inclusive en el espacio de nombres) para hacer disponibles dentro de éste todos los nombres de un espacio de nombres. Esta práctica se recomienda frente al uso de las directrices using globales, dejando el uso de éstas últimas para casos excepcionales como, por ejemplo, para la migración de código ya escrito.

atras2

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s