2.4. Más sobre iostreams

Hasta ahora sólo ha visto los aspectos más rudimentarios de las clases iostream. El formateo de salida que permiten los iostreams también incluyen características como el formateo de números en decimal, octal, y hexadecimal. Aquí tiene otro ejemplo del uso de los iostreams:

//: C02:Stream2.cpp
// More streams features
#include <iostream>
using namespace std;

int main() {
  // Specifying formats with manipulators:
  cout << "a number in decimal: "
       << dec << 15 << endl;
  cout << "in octal: " << oct << 15 << endl;
  cout << "in hex: " << hex << 15 << endl;
  cout << "a floating-point number: "
       << 3.14159 << endl;
  cout << "non-printing char (escape): "
       << char(27) << endl;
} ///:~

Listado 2.3. C02/Stream2.cpp


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, se puede enviar cualquier carácter a un objeto stream usando un molde (cast) a char (un char es un tipo de datos que manipula un sólo carácter). 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.

2.4.1. 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 libro. 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.

//: C02:Concat.cpp
// Character array Concatenation
#include <iostream>
using namespace std;

int main() {
  cout << "This is far too long to put on a "
    "single line but it can be broken up with "
    "no ill effects\nas long as there is no "
    "punctuation separating adjacent character "
    "arrays.\n";
} ///:~

Listado 2.4. C02/Concat.cpp


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.