Espacios de nombres (namespaces) Espacios de nombres • Software puede ser construido en base a muchas bibliotecas, módulos o componentes Conflictos de nombre Programación Orientada a Objeto Ing. Civil en Telecomunicaciones Varias bibliotecas pueden definir objetos del mismo nombre, e.g., Texto Los espacios de nombres resuelven este problema al agrupar todos los identificadores bajo un nombre común Definición de namespace // Definicion de identificadores en namespace namespace mariomedina { class Texto; void miFuncion(const Texto& t); . . . } // Uso de identificadores de un namespace mariomedina::Texto texto01; mariomedina::miFuncion(texto01); Reglas de búsqueda de Koenig • No es necesario especificar el namespace de una función si uno o más de sus argumentos pertenece al namespace • El caso anterior podria escribirse como // Uso de identificadores de un namespace mariomedina::Texto texto01; miFuncion(texto01); Declaración using Directiva using namespace • La declaración using incluye el identificador asociado al namespace en el programa • La directiva using namespace incluye todos los identificadores asociados al namespace using mariomedina::Texto; Texto texto01; Incluye el objeto Texto del namespace using namespace std; Incluye todos los identificadores asociados a la biblioteca estándar de C++ mariomedina en el programa © 2015 Mario Medina C. 1 Uso de namespaces anidados namespace hardware { namespace CPU { class AMD; class Intel; } namespace memoria { class RAM; class ROM; } } using hardware::CPU::Intel; © 2015 Mario Medina C. Recomendaciones • Usar using namespace con cuidado El objetivo de los namespaces es evitar conflictos de nombres. La probabilidad de conflicto aumenta con el número de namespaces incluidos en el código • Para evitar conflictos, using no debe usarse en archivos de encabezado .h Sólo en archivos de código .cpp después de directivas #include 2