Condividi tramite


Overload dell'operatore << per classi personalizzate

I flussi di input usano l'operatore di inserimento (<<) per i tipi standard. È possibile eseguire l'overload dell'operatore << per le classi personalizzate.

Esempio

L'esempio di funzione write ha illustrato l'uso di una struttura Date. La data rappresenta il candidato ideale per una classe C++ nella quale i membri dati (mese, giorno e anno) sono nascosti nella visualizzazione. Un flusso di output è la destinazione logica per la visualizzazione di tale struttura. Questo codice visualizza una data usando l'oggetto cout:

Date dt(1, 2, 92);

cout <<dt;

Per fare in modo che cout accetti un oggetto Date dopo l'operatore di inserimento, eseguire l'overload dell'operatore di inserimento in modo che riconosca un oggetto ostream a sinistra e un oggetto Date a destra. La funzione dell'operatore << in overload deve quindi essere dichiarata come Friend della classe Date in modo che possa accedere ai dati privati all'interno di un oggetto Date.

// overload_date.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

class Date
{
    int mo, da, yr;
public:
    Date(int m, int d, int y)
    {
        mo = m; da = d; yr = y;
    }
    friend ostream& operator<<(ostream& os, const Date& dt);
};

ostream& operator<<(ostream& os, const Date& dt)
{
    os << dt.mo << '/' << dt.da << '/' << dt.yr;
    return os;
}

int main()
{
    Date dt(5, 6, 92);
    cout << dt;
}
5/6/92

Osservazioni:

L'operatore in overload restituisce un riferimento all'oggetto ostream originale, pertanto è possibile combinare gli inserimenti:

cout <<"The date is" <<dt <<flush;

Vedi anche

Output Streams (Flussi di output)