uso de las clases iostream

29
Uso de las clases iostream Clase 04

Upload: tensor

Post on 11-Apr-2017

106 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Uso de las clases iostream

Uso de las clases iostreamClase 04

Page 2: Uso de las clases iostream

Uso de las clases iostream• Ahora ya tiene suficientes conocimientos para crear y compilar

un programa. Este programa usará las clases de flujo de entrada-salida (iostream) del C++ estándar.

• iostream es capaz de leer y escribir en ficheros o en la entrada y salida estándar (que suele ser la consola, pero que puede ser redirigida a ficheros o dispositivos). En este programa simple, se usa un objeto stream (flujo) para imprimir un mensaje en pantalla

Page 3: Uso de las clases iostream

Uso de las clases iostream• Para declarar las funciones y los datos externos que contenga la

clase iostream hay que incluir el fichero de cabecera de la siguiente manera:

Page 4: Uso de las clases iostream

Uso de las clases iostream• El primer programa usa el concepto de salida estándar, que

significa un lugar de propósito general, al que se le pueden enviar cosas. Se verá otros ejemplos que utilizan la salida estándar de otras formas, pero aquí simplemente usaremos la consola.

• El paquete iostream define una variable (un objeto) llamado cout de forma automática que es capaz de enviar todo tipo de datos a la salida estándar.

Page 5: Uso de las clases iostream

Uso de las clases iostream• Para enviar datos a la salida estándar, se usa el operador. Los

programadores de C lo conocen como operador de “desplazamiento a la izquierda”. Basta decir que el desplazamiento a la izquierda no tiene nada que ver con la salida. Sin embargo, C++ permite que los operadores sean sobrecargados.

• Cuando se sobrecarga un operador, se le da un nuevo significado siempre que dicho operador se use con un objeto de determinado tipo. Con los objetos de iostream, el operador << significa “enviar a”. Por ejemplo:

Page 6: Uso de las clases iostream

Uso de las clases iostream

envía la cadena “¿Qué tal?” al objeto llamado cout (que es un diminutivo de “console output” (salida por consola).

Page 7: Uso de las clases iostream

Espacios de nombres• Como se menciona, uno de los problemas del lenguaje C es que “nos quedamos

sin nombres” para funciones e identificadores cuando los programas llegan a ser de cierto tamaño. Por supuesto que realmente no nos quedamos sin nombres; aunque se hace más difícil pensar en nombres nuevos después de un rato. Y todavía más importante, cuando un programa alcanza cierto tamaño es normal fragmentarlo en trozos más pequeños cada uno de los cuales es mantenido por diferentes personas o grupos. Como C sólo tiene un problema para lidiar con todos los identificadores y nombres de función, trae como consecuencia que todos los desarrolladores deben tener cuidado de no usar accidentalmente los mismos nombres en situaciones en las que pueden ponerse en conflicto. Esto se convierte en una pérdida de tiempo, se hace tedioso y en último término, es más caro.

Page 8: Uso de las clases iostream

Espacios de nombres• El C++ Estándar tiene un mecanismo para impedir estas

colisiones: la palabra reservada namespace (espacio de nombres). Cada conjunto de definiciones de una librería o programa se “envuelve” en un espacio de nombres, y si otra definición tiene el mismo nombre, pero está en otro espacio de nombres, entonces no se produce colisión.

Page 9: Uso de las clases iostream

Espacios de nombres• Hay una palabra reservada que le permite decir “quiero usar las

declaraciones y/o definiciones de este espacio de nombres”. Esa palabra reservada, bastante apropiada por cierto, es using. Todas las librerías de C++ Estándar están incluidas en un único espacio de nombres, que es std (por “standard”). Como este curso se usa la librería estándar casi exclusivamente, se verá la siguiente directiva using en casi todos los programas

Page 10: Uso de las clases iostream

Espacios de nombres• Esto significa que quiere usar todos los elementos del espacio

de nombres llamado std. Después de esta sentencia, ya no hay que preocuparse de si su componente o librería particular pertenece a un espacio de nombres, porque la directiva using hace que el espacio de nombres esté disponible para todo el fichero donde se escribió la directiva using.

Page 11: Uso de las clases iostream

Espacios de nombres• Exponer todos los elementos de un espacio de nombres

después de que alguien se ha molestado en ocultarlos, parece contraproducente, y de hecho, el estudiante deberá tener cuidado si considera hacerlo (como aprenderá más tarde en este curso). Sin embargo, la directiva using expone solamente los nombres para el fichero actual, por lo que no es tan drástico como suena al principio. (pero piénsalo dos veces antes de usarlo en un fichero cabecera, eso es temerario).

Page 12: Uso de las clases iostream

Espacios de nombres• Existe una relación entre los espacios de nombres y el modo en

que se incluyes los ficheros de cabecera. Antes de que se estandarizara la nueva forma de inclusión de los ficheros cabecera (sin el “.h” como en <iostream>), la manera típica de incluir un fichero de cabecera era con el “.h” como en <iostream.h>. En esa época los espacios de nombres tampoco eran parte del lenguaje, por lo que para mantener una compatibilidad hacia atrás con el código existente, si se escribía:

Page 13: Uso de las clases iostream

Espacios de nombres• En realidad, significaba:

Page 14: Uso de las clases iostream

Fundamentos de la estructura de los programa• Un programa C o C++ es una colección de variables, definiciones de

función, y llamada a funciones. Cuando el programa arranca, ejecuta el código de inicialización y llama a una función especial, “main()”, que es donde debe colocarse el código principal del programa.

• Como se mencionó anteriormente, una definición de función consiste en un valor de retorno (que debe ser especificarse obligatoriamente C++), un nombre de función, una lista de argumentos, y el código de la función entre llaves. Aquí hay un ejemplo de definición de función:

Page 15: Uso de las clases iostream

Fundamentos de la estructura de los programa

La función de arriba tiene una lista vacía de argumentos y un cuerpo que contiene únicamente un comentario.Puede haber varios pares de llaves en la definición de una función, pero siempre debe haber al menos dos que envuelvan todo el cuerpo de la función. Como main( ) es una función, debe seguir esas reglas. En C++, main( ) siempre devuelve un valor de tipo int (entero).

Page 16: Uso de las clases iostream

Fundamentos de la estructura de los programa• C y C++ son lenguajes de formato libre. Con un par de excepciones, el

compilador ignora los espacios en blanco y los saltos de línea, por lo que hay que determinar el final de una sentencia. Las sentencias están delimitadas por punto y coma.

• Los comentarios en C empiezan con /* y finalizan con */. Pueden incluir saltos de línea. C++ permite este estilo de comentarios y añade la doble barra inclinada:

• //. La // empieza un comentario que finaliza con el salto de línea. Es más útil que /* */ y se usa ampliamente en este curso.

Page 17: Uso de las clases iostream

“Hello,World!”• Y por fin, el primer programa:

Page 18: Uso de las clases iostream

“Hello,World!”• Y por fin, el primer programa:

Page 19: Uso de las clases iostream

“Hello,World!”• El objeto cout maneja una serie de argumentos por medio de los operadores

<<, que imprime los argumentos de izquierda a derecha. La función especial endl provoca un salto de línea. Con los iostreams se puede encadenar una serie de argumentos como aquí, lo que hace que se una clase fácil de usar.

• En C, el texto que se encuentra entre comillas dobles se denomina “cadena” (string). Sin embargo, la librería Estándar de C++ tiene una poderosa clase llamada string para manipulación de texto, por lo que usaremos el término más preciso array de caracteres para el texto que se encuentre entre dobles comillas

Page 20: Uso de las clases iostream

“Hello,World!”• El compilador pide espacio de memoria para los arrays de caracteres y guarda el

equivalente ASCII para cada carácter en este espacio. El compilador finaliza automáticamente este array de caracteres añadiendo el valor 0 para indicar el final.

• Dentro del array de caracteres, se pueden insertar caracteres especiales usando las secuencias de escape. Consisten en una barra invertida (\) seguida de un código especial. por ejemplo \n significa salto de línea. El manual del compilador o la guía concreta de C ofrece una lista completa de secuencia; entre otras se incluye: \t (tabulador), \\ (barra invertida), y \b (retroceso).

• Tenga en cuenta que la sentencia puede continuar en otras líneas, y la sentencia completa termina con un punto y coma.

Page 21: Uso de las clases iostream

“Hello,World!”• Los argumentos de tipo array de caracteres y los números

constantes están mezclados en la sentencia cout anterior. Como el operador << está sobrecargado con varios significados cuando se usa con cout, se pueden enviar distintos argumentos y cout se encargará de mostrarlos

Page 22: Uso de las clases iostream

Más sobre iostreams• Hasta ahora sólo ha visto los aspectos más rudimentarios de las

clases iostream.

• El formato de salida que permiten los iostreams también incluyen características como el formato de números en decimal, octal, y hexadecimal. Aquí tiene otro ejemplo del uso de los iostreams

Page 23: Uso de las clases iostream

Más sobre iostreams

Page 24: Uso de las clases iostream

Más sobre iostreams

Page 25: Uso de las clases iostream

Más sobre iostreams• Este ejemplo muestra cómo la clase iostreams imprime números en

decimal, octal, y hexadecimal usando manipuladores (los cuales no imprimen nada, pero cambian el estado del flujo de salida). El formato de los números en punto flotante lo determina automáticamente el compilador. Además, cualquier se puede enviar cualquier caracter a un objeto stream usando un molde (cast) a char (un char es un tipo de datos que manipula un sólo caracter). Este molde parece una llamada a función: char( ), devuelve un valor ASCII. En el programa de arriba, el char(27) envía un ¨escape¨ a cout.

Page 26: Uso de las clases iostream

Concatenar vectores de caracteres• Una característica importante del preprocesador de C es la

concatenación de arrays de caracteres. Esta característica se usa en algunos de los ejemplos de este curso. Si se colocan juntos dos arrays de caracteres entrecomillados, sin signos de puntuación entre ellos, el compilador los pegará en un único array de caracteres. Esto es particularmente útil cuando los listados de código tienen restricciones de anchura.

Page 27: Uso de las clases iostream

Concatenar vectores de caracteres

Page 28: Uso de las clases iostream

Concatenar vectores de caracteres

Page 29: Uso de las clases iostream

Concatenar vectores de caracteres• Al principio, el código de arriba puede parecer erróneo porque

no está el ya familiar punto y coma al final de cada línea. Recuerde que C y C++ son lenguajes de formato libre, y aunque normalmente verá un punto y coma al final de cada línea, el requisito real es que haya un punto y coma al final de cada sentencia, por lo que es posible encontrar una sentencia que ocupe varias líneas