Documento 89518

Anuncio
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Entrada y Salida Estándar
• La sobrecarga del operador “<<” y “>>”
permite generar entrada/salida de distinto
objetos utilizando una única sentencia.
3.7 C++: Entrada y Salida
cout << “Esto saldrá por la salida estándar
(pantalla) << x ;
cin >> Nombre; // Ingreso desde la Entrada estándar
• Nótese que no se requiere indicar el tipo de
dato (como ocurre con printf, scanf, etc.).
1
III-2
Departamento de Informática
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Lenguajes de Programación
Universidad Técnica Federico Santa María
Streams
Ejemplo de Streams
• Streams estándares:
int main (void) {
int input;
cout << “Ingrese un numero distinto de cero\n”;
cin >> input;
if (input == 0)
cerr << “Error: Ingreso Invalido\n”;
cout << “Recíproco:” << 1.0 / input;
return 0;
}
– cin corresponde al stream estándar de entrada
– cout es el stream estándar de salida
– cerr el stream estándar de salida de errores
• Para usar otros archivos o dispositivos, se
deben crear los streams apropiados y
asociarlos a los respectivos dispositivos o
archivos.
III-3
Departamento de Informática
Universidad Técnica Federico Santa María
III-4
Departamento de Informática
Lenguajes de Programación
Lenguajes de Programación
Universidad Técnica Federico Santa María
Streams de Entrada/Salida
Jerarquía de clases para Streams
• Un ostream es un mecanismo para
convertir valores de varios tipos en una
secuencia de caracteres.
• Un istream provee el manejo de la entrada.
• Ambas clases se definen en <iostream.h>
(que se compone de istream y ostream)
ios_base
ios
istream
istrstream
ifstream
iostream
fstream
III-5
ostream
ofstream
ostrstream
strstream
III-6
Departamento de Informática
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Lenguajes de Programación
Universidad Técnica Federico Santa María
Salida de Tipos
Definidos por el Usuario
Entrada de Tipos
Definidos por el Usuario
• Se debe sobrecargar “<<”. Por ejemplo:
• Al igual que con ostream, istream provee el
operador “>>” para un conjunto de tipos
estándares.
class complejo {
public:
double real() {return re;}
double imag() { return im; }
...
};
• El operador “>>” se puede sobrecargar para un
tipo definido por el usuario.
• Ejemplo: leer un número complejo con formatos
// A continuación, se sobrecarga “<<”
ostream & operator<<(ostream&s, const complejo& z) {
return s << ‘(‘ << z.real() << ‘,’ <<
z.imag() << ‘)’;
}
– float
– (float)
– (float, float)
// sólo parte real
// idem
// parte real e imaginaria
III-7
Departamento de Informática
III-8
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Universidad Técnica Federico Santa María
Ejemplo: Entrada de Tipos Definidos
por el Usuario
Lenguajes de Programación
Manejo de Archivos
istream& operator>>(istream& s, complejo& a)
{ double re = 0, im =0;
char c = 0;
s >> c; // se lee el primer caracter
if (c == ‘(‘) {
s >> re >> c;
//se lee parte real y el siguiente carácter
if (c == ‘,’)
// Ahora viene la parte imaginaria
s >>im >> c;
if (c != ‘)’)
//Ooops! Mal formato
} else {
s.putback(c); //Solo viene la parte real....
s >> re; // comer parte real
}
if (s) a=complejo(re,im); // construir el número complejo
return s;
• cin, cout, cerr están asociados a los
dispositivos “por defecto”
• El usuario puede crear sus propios streams.
• Los streams se asocian a un determinado
dispositivo.
• En el caso de archivos, se incluye el header
<fstream.h>
}
III-9
Departamento de Informática
III-10
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Universidad Técnica Federico Santa María
Ejemplo:
Lenguajes de Programación
Streams de Strings
Copiar un archivo a otro
int main(int argc, char *argv[])
{
if (argc!=3) error(“Número de argumentos incorrecto”);
ifstream desde(argv[1]);
if (!desde) error(“No se puede abrir archivo”, argv[1]);
ofstream hacia(argv[2]);
if (!hacia) error(“No se puede abrir archivo”, argv[2]);
char ch;
while (desde.get(ch)) hacia.put(ch); // copiar caracteres
if (!desde.eof() || hacia.bad() ) error(“Pasó algo raro”);
return 0;
• Un stream también puede asociarse a un
string
• De esta manera, se puede:
– Leer desde un string
– Escribir hacia un string
• Estos streams se denominan strstreams
• Se definen en <strstream.h>
}
III-11
III-12
Departamento de Informática
Universidad Técnica Federico Santa María
Departamento de Informática
Lenguajes de Programación
Universidad Técnica Federico Santa María
Lenguajes de Programación
Entrada a Streams de Strings
Salida a Streams de Strings
• Salida a Strings: ostrstreams
• Entrada desde Strings: istrstream
string crear_mensaje_error(int n, const string& cs )
{
extern const char * msgs[];
ostrstream ost;
ost << “error(“ << n << “):” <<msgs[n]
<< “ (comentario:” << cs <<“)”;
return ost .str();
}
void palabras_por_linea( const string& s) {
istrstream ist(s);
string w;
while (ist >>w) // obtener palabra desde el string s
cout <<w << ‘\n’;
}
• Este ejemplo, formatea un string para su
posterior despliegue
III-13
Departamento de Informática
Universidad Técnica Federico Santa María
Lenguajes de Programación
Entrada/Salida C
• C++ permite utilizar las funciones de entrada y
salida de C, entre otras:
int printf(const char* format, ...);
int fprintf(FILE*,const char* format, ...);
int sprintf(char*p, const char*format,...);
• La ventaja de los streams sobre las funciones C, es
que utilizan un estilo común para especificar E/S de
objetos construidos por el usuario, y además son
realizan una verificación segura de tipos.
III-15
III-14
Documentos relacionados
Descargar