namespace
filed in Programacíon on Ago.20, 2008
Bueno no voy a entrar en detalles dando el concepto teórico de un namespace ( en español, espacio de nombres), pueden consultar wikipedia o google si lo desean, explicare su funcion básica con ejemplos.
Sigamos el siguiente código:
#include <iostream> namespace Hola { void Imprimir() { std::cout<<"Hola"; } } namespace Mundo { void Imprimir() { std::cout<<" Mundo"<<std::endl; } } int main() { Hola::Imprimir(); Mundo::Imprimir(); return 0; }
La salida de este programa seria “Hola Mundo”. Ahora, como funciona? el ejemplo es bastante claro, primero tenemos 2 namespace llamados Hola y Mundo, cada uno con una funcion llamada Imprimir(), que para el ejemplo solo imprimen lineas distintas para cada caso, pero pudieran ser funciones totalmente diferentes. En la funcion main, vemos la sintaxis para llamar una funcion dentro de un namespace.
Ahora, para que todo esto? bien en principio nos damos cuenta que es posible tener funciones con el mismo nombre dentro de namespace distintos, no solo funciones, cualquier tipo de código, sean variables, clases, etc, es decir, podemos agrupar segmentos de código dentro de un namespace.
Esto resulta de gran utilidad cuando trabajamos con muchas librerías distintas, en las que pudiéramos tener elementos con nombres iguales. Encapsulando nuestro código en un namespace evitamos la colision de nombres.
Ahora, se habran fijado de las lineas
std::cout<<"Hola";
y
cout<<" Mundo"<<std::endl;
Bien, si observan detenidamente, estamos ingresando a “cout” a travez de un namespace, en este caso, “namespace std” que es estándar de la <iostream>
Pero, tenemos que escribir std:: cada vez que usemos un elemento de esta librería? Si, de hecho el código no compilara de no hacerlo, si alguna vez compilaron código sin determinar el namespace es porque usaron
#include <iostream.h>
en vez de
#include <iostream>
Lo que significa que ( como lo explico en mi articulo anterior) usaron la versión antigua de cout y no la actual, lo que puede llevar a confusiones.
Ahora, la forma correcta de seleccionar un namespace y no tener que especificarlo en cada llamada, es con un
using namespace std;
De esta forma declaramos que a lo largo nuestro codigo, usaremos el namespace std, teniendo en cuenta que esto debe declararse antes de usar la libreria como tal, por lo general, despues de nuestros #include. Asi, el codigo anterior quedaria de la siguiente forma:
#include <iostream> using namespace std; namespace Hola { void Imprimir() { cout<<"Hola"; } } namespace Mundo { void Imprimir() { cout<<" Mundo"<<endl; } } int main() { Hola::Imprimir(); Mundo::Imprimir(); return 0; }
Preguntas, correcciones o comentarios son bienvenidos.
—
Fred