Ya
se ha visto que C++ dispone de unas herramientas propias de entrada
y salida de datos basadas en clases y en la herencia
que son fáciles de extender y modificar. Si este
tema no se ha visto anteriormente con más extensión,
es porque conviene haber visto la herencia para entenderlo
correctamente.
Es
necesario recordar aquí el concepto de stream o flujo,
que se puede definir como dispositivo que produce o consume información.
Un flujo está siempre ligado a un dispositivo
físico. Todos los flujos, independientemente
del dispositivo físico al que se dirijan (disco, monitor
,)
se comportan de forma análoga.
Al
ejecutarse un programa en C++ se abren automáticamente los
flujos siguientes:
cin:
entrada estándar (teclado)
cout: salida estándar (pantalla)
cerr: salida de mensajes de error (pantalla)
C++
dispone de dos jerarquías de clases para las operaciones
de entrada/salida: una de bajo nivel, streambuf, que
no se va a explicar porque sólo es utilizada por programadores
expertos, y otra de alto nivel, con las clases: istream, ostream
e iostream, que derivan de la clase ios. Estas
clases disponen de variables y métodos
para controlar los flujos de entrada y salida (ver
la jerarquía de clases de entrada/salida en la figura 8,
un poco más adelante).
Entrada/salida
con formato. Cada flujo de C++ tiene asociados
unos indicadores, que son unas variables miembro enum
de tipo long que controlan el formato
al activarse o desactivarse alguno de sus bits.
Su valor hexadecimal
es:
enum
{
skipws=0x0001,
left=0x0002, rigth=0x0004, internal=0x0008,
dec=0x0010, oct=0x0020 hex=0x0040, showbase=0x0080,
showpoint= 0x0100 uppercase=0x0200, showpos=0x0400, scientific=0x800,
fixed=0x1000, unitbuf=0x2000
};
Su significado es el siguiente:
skipws:
se descartan los blancos iniciales a la entrada
left: la salida se alinea a la izquierda
rigth: la salida se alinea a la derecha
internal: se alinea el signo y los caracteres indicativos
de la base por la
izquierda y las cifras por la derecha
dec: salida decimal para enteros (defecto)
oct: salida octal para enteros
hex:salida hexadecimal al para enteros
showbase: se muestra la base de los valores numéricos
showpoint: se muestra el punto decimal
uppercase: los caracteres de formato aparecen en mayúsculas
showpos: se muestra el signo (+) en los valores positivos
scientific: notación científica para coma
flotante
fixed: notación normal para coma flotante
unitbuf:
salida sin buffer (se vuelca cada operación)
stdio
permite compatibilizar entrada/salida al modo de C con <stdio.h>
y almodo de C++ con <iostream.h>
La
forma de definir las constantes anteriores permite componerlas fácilmente,
guardando toda la información sobre ellas en una única
variable long. Existen unos indicadores
adicionales (adjustfield, basefield y floatfield)
que actúan como combinaciones de los anteriores (máscaras):
-
adjustfield
es una combinación excluyente (sólo una en on)
de left, rigth e internal
-
basefield
es una combinación excluyente (sólo una en on)
de dec, oct e hex
-
floatfield
es una combinación excluyente (sólo una en on)
de scientific y fixed
Por defecto todos los indicadores anteriores
están desactivados, excepto skipws y dec.
|