Ayuda con "using namespace"
Para que sirve exactamente la directiva "using namespace", alguine podria explicarmelo detalladamente?
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
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
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()
{
}
}
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()
{
}
}
