Ayuda con "using namespace"

Pablo
01 de Agosto del 2002
Para que sirve exactamente la directiva "using namespace", alguine podria explicarmelo detalladamente?

herraiz
01 de Agosto del 2002
Los nombres de espacios (namespaces) sirven para que no surjan conflictos entre diferentes bibliotecas.

Imagínate que tú creas una biblioteca con una clase que se llama DataFile (por decir algo), y que resulta que en el VisualC++ han puesto una clase que se llama igual. ¿Qué hace el compilador cuándo creas un objeto DataFile? ¿Cómo distingue entre una biblioteca u otra si usas las dos? La solución está en los namespaces.

Si le pones

using namespace nombre_de_mi_biblioteca

buscará la clase DataFile en tu biblioteca.

Si le pones

using namespace std

buscará la clase DataFile en los directorios predeterminados del compilador.

En verdad, las bibliotecas no usan muchos los namespace. En su lugar le ponen un prefijo a sus clases. Por ejemplo CDataFile con MFC (si exisitiera CDataFile, sólo es un ejemplo), QDataFile con Qt, wxDataFile con wxWindows.

Si tienes más dudas, por ahí existe un libro llamado Thinking in C++, que se distribuye gratuitamente en Internet. Busca en www.google.com (no sé si existirá una traducción al español).

Espero haberte sido de ayuda

herraiz
01 de Agosto del 2002
Se me olvidó comentarte cómo se crean los namespaces. Es muy sencillo. Por ejemplo, imagínate que vas a crear una clase y dos funciones en el namespace MiNombre:

namespace MiNombre
{
void PrimeraFuncion(int un_numero);
bool EsMentira();
class ConMuchaClase
{
public:
ConMuchaClase();
~ConMuchaClase();
};
}

Después para implementar las funciones, puedes hacer lo mismo, o referirte a las funciones como:

void MiNombre::PrimeraFuncion(int un_numero)
{
}

bool MiNombre::EsMentira()
{
return false;
}

namespace MiNombre
{
ConMuchaClase::ConMuchaClase()
{
}

~ConMuchaClase::~ConMuchaClase()
{
}
}