Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Sputnik_ en 28 Noviembre 2012, 15:34 PM

Título: Duda de principiante
Publicado por: Sputnik_ en 28 Noviembre 2012, 15:34 PM
Hola, me estoy introduciendo a C++ y no comprendo bien esto, estoy siguiendo los vídeo tutoriales de OutKast  (junto al libro de deitel) y por ejemplo en este programa puso
(02.-CUrso de Videotutoriales C++. Análisis de un Programa ):

Código (cpp) [Seleccionar]
#include <iostream>

int main()
{
std::cout << "SALUDOS" ;
return 0;
}


A el parece correrlo bien, pero usa visual c++ 6.0, en mis compiladores que utilizo no me permite, sino que tengo que agregarle
Código (cpp) [Seleccionar]
using namespace std; , por que es eso? y cuando se tiene que usar o no el endl ? porque yo si lo uso o no, me muestra lo mismo, y la librería <stdlib.h> es lo mismo poner <cstdlib> ?

Saludos , y desde ya muchas gracias
Título: Re: Duda de principiante
Publicado por: febef en 28 Noviembre 2012, 15:58 PM
Hola ZombieKiller96

 - Una de las características de C++  es el encapsulamiento.
   
   Esto es podemos -encapsular, en un espacio, código para usar unos nombres de de funciones y en otro espacio los podemos volver a definir sin que se "crucen". Aunque más que nada sirve para mantener ordenadas las distintas partes de las librerías o los conjuntos de las mismas etc.

   Cada vez que se quiere usar alguna función que encapsulada en estos espacios hay que llamarla con una referencia a ellos, ejemplo:

Código (cpp) [Seleccionar]
std::cout << "blabla" << std::endl;

   Aunque si vamos a hacer uso frecuente de estas funciones, constantes, variables, etc. ponemos después de incluir las librerías que vamos a hacer uso de ese espacio, ejemplo:

Código (cpp) [Seleccionar]
using namespace std;

   De esta forma no hay que poner la referencia a el nombre de espacio, std::*, cada vez que llamamos a funciones de él mismo como cout, cin, endl, etc. Si no solo llamarlas.

   El código quedaría de la siguiente forma:
Código (cpp) [Seleccionar]
cout << "blabla" << endl;

 - El uso de endl depende de lo que quieras hacer, lo que hace es poner el retorno de carro y salto de linea. Si no lo pones y enviás con cout otra cadena esta saldrá seguida de la anterior, "en el mismo renglón". En cambio poniéndolo la próxima vez que mandes una cadena saldrá en un "nuevo renglón".
   
 - Con el tema de las librerías todas las estándares de C están en C++ y pueden ser incluidas con su nombre original o sino también C++ las suele nombrar quintando le la extensión ".h" y agregando una c en el comienzo.

Espero haber ayudado. Y aconsejo q leas un librito del tema.







Título: Re: Duda de principiante
Publicado por: rir3760 en 28 Noviembre 2012, 16:10 PM
Cita de: ZombieKiller96 en 28 Noviembre 2012, 15:34 PMen mis compiladores que utilizo no me permite, sino que tengo que agregarle
Código (cpp) [Seleccionar]
using namespace std; , por que es eso?
No debería.

Cuando utilizas la biblioteca estándar de C++ e incluyes alguna facilidad de esta, por ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>
Todos los nombres se colocan en el nombres de espacios estándar "std". Eso para evitar un conflicto con los objetos que tu declaras en el programa.

Para acceder a ellos (los de la biblioteca estándar) hay tres formas:

1) Indicando de forma explicita el nombre de espacios donde se encuentran con el operador de ámbito "::", por ejemplo:
Código (cpp) [Seleccionar]
#include <iostream>

int main()
{
   std::cout << "hola, mundo" << std::endl;
   
   return 0;
}


2) Agregando todo el contenido del nombre de espacios "std" al nombre de espacios global:
Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
   cout << "hola, mundo" << endl;
   
   return 0;
}


3) Agregando solo lo necesario al nombre de espacios global con una sentencia "using", por ejemplo:
Código (cpp) [Seleccionar]

#include <iostream>
using std::cout;
using std::endl;

int main()
{
   cout << "hola, mundo" << endl;
   
   return 0;
}


Cita de: ZombieKiller96 en 28 Noviembre 2012, 15:34 PMy cuando se tiene que usar o no el endl ?
Si apenas empiezas asegúrate que cada linea que envíes a la salida estándar termine con el carácter de avance de linea. Las razones (bufer de la salida estándar y cuando este se vacía explicita o implícitamente) supongo lo veras mas adelante.

Cita de: ZombieKiller96 en 28 Noviembre 2012, 15:34 PMy la librería <stdlib.h> es lo mismo poner <cstdlib> ?
No. El nombre correcto en C++ es <cstdlib>.

Un saludo
Título: Re: Duda de principiante
Publicado por: Sputnik_ en 28 Noviembre 2012, 16:23 PM
Muchas gracias por las respuestas, ya ahora comprendo todo bien, hice andar finalmente el programa y por ahora me quedo sin dudas, muchas gracias por tomarse el trabajo de contestarme,
saludos!  ;)