Sabemos que un programa C++ utiliza el operador de inserción (<<) para mostrar datos de salida, tambien que el flujo de salida cout está definido como una clase y por lo tanto contiene ciertas funciones, llamadas miembro. En los programas que hemos visto hasta éste momento utilizamos el flujo de salida cout en conjunto con el operador de inserción << para mostrar datos de salida, sin embargo podemos hacer uso de las funciones miembro de salida definidas para el flujo cout en caso de necesitar un control más preciso, las funciones principales para el flujo de salida están definidas en el archivo ostream.h. Analizando éste archivo de cabecera podemos ver las funciones mencionadas, pero además podemos apreciar que la clase ostream está derivada de la clase ios y por lo tanto tambien podemos utilizar con los flujos de salida las funciones propias de la clase ios.
Recuerde que en la siguiente lección trataremos el tema de las clases,
por lo pronto es bueno que empiece a familiarizarse con la terminología
de la programación en C++. Veamos un ejemplo de las funciones miembro
de cout llamadas put y write.
//***********************************************
// salida01.cpp
//***********************************************
#include <iostream.h>
int main()
{
int letra;
char letras[]="Programacion en C++ por Virgilio"
"Gomez Negrete";
for(letra='A'; letra <= 'Z'; letra++)
{
cout << letra << " ";
}
cout << "\n\n";
for(letra='A'; letra <= 'Z'; letra++)
{
cout.put((char)letra);
cout << " ";
}
cout << "\n\n";
cout.write(letras, 21);
cout << endl;
return 0;
}
|
El programa contiene dos bucles que demuestran la diferencia entre utilizar la función miembro put versus el mecanismo tradicional cout <<. Observe que hemos declarado una variable de tipo int llamada letra,
por ésta razón el primer bucle despliega las letras del alfabeto, sólo
que en sus respectivos equivalentes decimales del código ASCII. El
segundo bucle es prácticamente igual al primero excepto por el uso de
la función miembro de la clase ostream llamada put que de acuerdo a su definición, su argumento debe ser de tipo char, por lo tanto debemos moldear nuestra variable de tipo int para que sea ahora de tipo char y así poder utilizarla en la función miembro put. Habrá notado que para tener acceso a una función miembro de una clase utilizamos el operador punto (.). Ya en la parte final del programa encontramos un ejemplo del uso de la función miembro llamada write, ésta despliega el número indicado de carácteres, en éste caso 21, empezando por el principio del arreglo de tipo char llamado letras. Estudiando el archivo de cabecera ostream.h podemos determinar las funciones miembro de la clase ostream
y sus respectivos argumentos, comparando ésta información con los
ejemplos aquí presentados nos ayudará a entender la manera en que se
relacionan las definiciones de las diferentes funciones con sus
aplicaciones reales, práctica que recomiendo ampliamente.
En el programa manipu05.cpp analizamos diferentes especificaciones de banderas que establecimos mediante el uso del manipulador setiosflags(), pues bien, podemos utilizar la función miembro setf() para realizar la misma función que con el manipulador setiosflags() y en forma similar, podemos utilizar la función unsetf() para los mismos propósitos que el manipulador resetiosflags(), incluso es posible combinar diferentes especificaciones de bandera mediante el uso del operador OR, más interesante aún es que podemos utilizar la función miembro flags()
para determinar el estado original de las banderas de flujo de E/S,
guardar el dato en una variable y posteriormente utilizarlo para
restituir la condición original de operación de las banderas de flujo,
como lo demuestra el siguiente programa, llamado salida02.cpp
//***********************************************
// salida02.cpp
//***********************************************
#include <iostream.h>
#include <iomanip.h>
int main()
{
long banderas_originales;
int numero=64;
banderas_originales=cout.flags();
cout << "banderas originales es: " << cout.flags() << endl;
cout.setf(ios::showbase|ios::uppercase|ios::hex);
cout << "banderas modificadas es: " << cout.flags() << endl;
cout << "la variable numero en base 16 es: "
<< numero << endl;
cout.flags(banderas_originales);
cout << "restituidas las banderas originales, \nahora "
"la variable numero en base 10 es: " << numero << endl;
cout << "banderas originales es: " << cout.flags() << endl;
return 0;
}
|
Se aprecia
cómo el uso adecuado de las funciones miembro puede simplificar un
código fuente y hacer el programa más eficiente, ésta es una buena
razón para tomarse un tiempo y examinar los diferentes archivos de
cabecera incluidos con nuestro compilador, de pasada respondemos a la
pregunta ¿Qué archivos de cabecera debo utilizar en mi programa? Muy
importante es familiarizarse con la documentación incluida en el
compilador que utilicemos, además es una buena práctica como
programador.
No response to “C++: Funciones de salida”
Publicar un comentario