Vandalismo en Wikipedia…

wiki vandalism

Vandalismo en Wikipedia

Leave a Comment

namespace

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

Tags:

Comments (1)

Empezando por el principio…

Bueno con tantas cosas que se me ocurren comentar sobre mis experiencias con C++, no sabia por donde comenzar,después de meditarlo me di cuenta que lo mas obvio era empezar… por el principio.
#include
Todo comienza con #include, no voy a explicar como funciona o para que, google sabe mucho mas que yo de eso, lo que voy a compartir es mis observaciones al momento de incluir librerías, por ejemplo, la diferencia entre:

#include <iostream.h>
#include <string.h>


y

#include <iostream>
#include<string>

Nótese la  inclusión o no de la extensión “.h”. Bien, en el estándar C, toda librería debe indicarse explícitamente con la extensión “.h” mientras en C++ no, de hecho la mayoría de los compiladores nos dan una advertencia al respecto, pero va mucho mas alla, iostream y iostream.h son de hecho dos librerías distintas, provenientes de distintas versiones (o revisiones) del estándar C++.

Que significa todo esto? pues que al usar #include <iostream.h> no solo estaremos violando el estándar definido de C++, además hay posibilidades, dependiendo del compilador, de que nuestro código no compile, debido a que existen funciones incluidas en la nueva librería estándar (<iostream>) que no estan en la anterior (<iostream.h>)

Por ultimo, tenemos que la nueva librería se encuentra dentro del namespace std del cual hablare en el próximo post.

Información Adicional:
iostream vs iostream.h

—–
Fred

Tags:

Comments (1)

Hello world!

Bueno… nunca he sido amigo de Blogs, la verdad prefiero leer que escribir, hay personas que tienen cosas mucho mas interesantes que decir que yo, pero ultimamente estoy viendo tantos amigos con blogs y flogs que me anime.

Gracias a Leydi por darme hosting mientras consigo mi propio sitio ( mentira, pienso quedarme aquì­ hasta que me bote o cierre la cuenta xD ).

Que pienso poner aquí? bueno en principio se me ocurre compartir algunas… vivencias en el Área de programación, mayormente en C/C++ y no se, cualquier cosa que se me ocurra por el camino.

Ah y este es mi primer blog, asi que no esperen mucho.

Comments (3)