Linguaggio C++

Libreria Ostream

Introduzione alla libreria ostream del C++: classi di output, operatore <<, formattazione base e gestione del flusso di output.

La libreria <ostream> definisce le classi e i meccanismi utilizzati per inviare dati verso uno stream di output, come la console o i file. È la libreria alla base di oggetti come cout, cerr e clog.

Non viene inclusa direttamente nella maggior parte dei programmi, perché è già parte di <iostream>. Tuttavia è importante conoscerla per capire come funziona l output in C++.


1️⃣ Inclusione della libreria

Se necessario, si può includere direttamente:


#include <ostream>

Nella pratica, basta includere <iostream>, che la contiene già.


2️⃣ Contenuti principali della libreria

La libreria contiene le classi fondamentali per l output:

Classe / OggettoDescrizione
ostreamClasse base per tutti gli stream di output
basic_ostreamVersione template di ostream
operator<<Operatore di inserimento (usato da cout)
flush()Svuota immediatamente il buffer
put()Scrive un singolo carattere
write()Scrive una sequenza di byte

3️⃣ L operatore di inserimento <<

L operatore << permette di inviare dati allo stream di output. È l operatore che permette di scrivere:


cout << "Ciao mondo!";

Può concatenare più valori:


cout << "Somma = " << 4 + 5 << "\n";

4️⃣ flush() e buffer dell output

Gli stream usano un buffer per ottimizzare la scrittura. Per forzare l output immediato si usa:


cout << "Salvataggio..." << flush;

endl manda a capo e fa anche flush automatico.


5️⃣ put() e write()

✔ put()
Scrive un singolo carattere.

cout.put('A');
✔ write()
Scrive una sequenza di byte.

const char* txt = "Ciao";
cout.write(txt, 4);   // stampa "Ciao"

6️⃣ Output con cerr e clog

Gli stream di errore derivano da ostream:

OggettoDescrizione
cerrOutput per errori, non bufferizzato
clogOutput per log, bufferizzato

7️⃣ Esempio completo


#include <iostream>
using namespace std;

int main() {
    cout << "Messaggio normale" << endl;
    cerr << "Messaggio di errore" << endl;
    clog << "Messaggio di log" << endl;

    cout.put('A');
    cout << endl;

    const char* txt = "Hello";
    cout.write(txt, 5);

    return 0;
}
LABORATORIO

Uso degli stream di output

In questo laboratorio esplorerai gli strumenti messi a disposizione dalla libreria <ostream>, imparando a usare correttamente l operatore di inserimento, la gestione del buffer e le funzioni put e write.


1 Stampa con operator<<

Crea un programma che usa l operatore << per stampare 3 valori concatenati.


cout << "Risultato: " << 10 << ", " << 20 << ", " << 30;

2 Uso di put()

Stampa la parola "CIAO" un carattere alla volta usando put().


cout.put('C');
cout.put('I');
cout.put('A');
cout.put('O');

3 Scrittura con write()

Scrivi con write() i primi 3 caratteri della parola "Programma".


const char* s = "Programma";
cout.write(s, 3);   // stampa "Pro"

4 Esercizi

  • Stampa un messaggio usando clog e verifica che sia bufferizzato.
  • Usa flush per forzare l output immediato.
  • Combina setw (da <iomanip>) con ostream per creare una tabella.
  • Scrivi un vettore di caratteri usando un ciclo e put().