Ver Mensaje Individual
  #9 (permalink)  
Antiguo 29/03/2016, 00:16
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: DUDA Promedios con c++

Los espacios de nombres en C++ se crearon con la idea de catalogar el código. Es una forma práctica de agrupar el código.

Otra ventaja de usar los espacios de nombre es que puedes tener elementos que se llamen igual pero con usos distintos cada uno en un espacio de nombres distinto y el programa funcionará perfectamente:

Código C++:
Ver original
  1. namespace a
  2. {
  3.   int var = 0;
  4. }
  5.  
  6. namespace b
  7. {
  8.   int var = 0;
  9. }
  10.  
  11. int main()
  12. {
  13.   a::var=5;
  14.  
  15.   std::cout << a::var << b::var;
  16. }

El código que no se encuentra dentro de un espacio de nombres explícito se ubica en lo que podríamos denominar espacio de nombres base. De hecho podemos hacer lo siguiente:

Código C++:
Ver original
  1. namespace a
  2. {
  3.   int var = 1;
  4. }
  5.  
  6. namespace b
  7. {
  8.   int var = 2;
  9. }
  10.  
  11. int var=3;
  12.  
  13. int main()
  14. {
  15.   int var = 4;
  16.  
  17.   std::cout << a::var << b::var << ::var << var;
  18. }
Cuando se usa "using namespace" se está importando el espacio de nombres al completo. Eso hace que pierdas el control sobre lo que t e estás trayendo. Si hay variables, clases o funciones que se solapan, cual es la que va a usar el compilador?? Lo mismo no es la que tú esperas:
Código C++:
Ver original
  1. namespace a
  2. {
  3.   int var = 0;
  4. }
  5.  
  6. namespace b
  7. {
  8.   int var = 0;
  9. }
  10.  
  11. using namespace a;
  12. using namespace b;
  13.  
  14. int main()
  15. {
  16.   var=5; // cual estamos rocando a::var o b::var??
  17.  
  18.   std::cout << a::var << b::var;
  19. }
Y el problema se agrava cuando la importación la declaramos en una cabecera ya que ahí estamos forzando a que todo aquel que use la cabecera tenga que importar el ese espacio de nombres. Con eso solo conseguimos crear confusión.

Si en un momento dado lo creemos conveniente podemos importar elementos concretos, lo que evita arrastrar todo el espacio de nombres:

Código C++:
Ver original
  1. using std::cout;
  2.  
  3. int main()
  4. {
  5.   int var;
  6.   cin >> var; // error
  7.   std::cin >> var; // ok
  8.  
  9.   cout << var; // ok
  10. }

El mensaje lo he escrito desde el móvil y el código no está probado. Lo aviso por si acaso.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.