0Pricing
C++ Academy · Lezione

Operatori di inserimento ed estrazione dagli stream

Renda i propri tipi interoperabili con std::cout tramite >

Operatori di inserimento ed estrazione dagli stream è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Perché sovraccaricare << e >>

Permetta ai propri tipi di interagire con std::cout e std::cin sovraccaricando gli operatori di flusso.

L'operatore di inserimento <<

Lo definisca come funzione libera che riceve uno stream di output per riferimento. Restituisca lo stream per abilitare il concatenamento.

struct Point { int x, y; };

std::ostream& operator<<(std::ostream& os, const Point& p) {
    return os << "(" << p.x << ", " << p.y << ")";
}

Point p{3, 4};
std::cout << p << "\n";   // (3, 4)

Perché una funzione libera?

Se lo scrivesse come membro, l'operando a sinistra dovrebbe essere un Point: impossibile, perché a sinistra ci serve std::ostream. Le funzioni libere supportano entrambi gli ordinamenti.

L'operatore di estrazione >>

Lo definisca per leggere dagli stream di input. Convalidi i dati e imposti il failbit in caso di errore.

std::istream& operator>>(std::istream& is, Point& p) {
    char open, comma, close;
    is >> open >> p.x >> comma >> p.y >> close;
    if (open != '(' || comma != ',' || close != ')')
        is.setstate(std::ios::failbit);
    return is;
}

Impostazione dello stato di errore dello stream

Se l'analisi non riesce, chiami is.setstate(std::ios::failbit). Il chiamante può rilevare l'errore con !is o is.fail().

Dichiarazioni friend

Se l'operatore deve accedere ai membri privati, lo dichiari come friend all'interno della classe.

class Point {
    int x_, y_;
public:
    friend std::ostream& operator<<(std::ostream& os, const Point& p);
};

Tipi di stream basati su template

Per ottenere la massima portabilità, utilizzi come parametro il tipo di carattere. È utile per gli stream con caratteri estesi.

template <typename CharT>
std::basic_ostream<CharT>& operator<<(
    std::basic_ostream<CharT>& os, const Point& p) {
    return os << "(" << p.x << ", " << p.y << ")";
}

Concatenamento

Restituire lo stream permette agli utenti di concatenare le operazioni.

std::cout << "Result: " << point << ", distance: " << dist;

Formattazione personalizzata

Utilizzi std::ios::fmtflags o std::format di C++20 per una formattazione avanzata. Gli stream sono più semplici, ma più difficili da localizzare.

Output in stile JSON

È possibile combinare diverse scelte di formattazione nel proprio operatore. Per output complessi, scriva funzioni di supporto.

Lettura di più righe

Utilizzi std::getline per la lettura basata sulle righe, quindi analizzi i dati con uno stringstream: in questo modo mantiene semplice il proprio operator>>.

Suggerimento sulle prestazioni

Per la registrazione con throughput molto elevato, preferisca librerie dedicate (spdlog, fmt): offrono prestazioni nettamente superiori a quelle degli stream.

Verifica rapida

Perché operator<< per un tipo definito dall'utente viene definito come funzione libera anziché come membro?

Riepilogo

Sovraccarichi operator<< e operator>> come funzioni libere che ricevono lo stream per riferimento. Restituisca lo stream per consentire il concatenamento. Imposti il failbit in caso di errori di analisi. Utilizzi friend quando è necessario accedere ai membri privati.

Domande Frequenti

La lezione «Operatori di inserimento ed estrazione dagli stream» è gratuita?

Sì — il testo completo di «Operatori di inserimento ed estrazione dagli stream» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Operatori di inserimento ed estrazione dagli stream»?

Renda i propri tipi interoperabili con std::cout tramite > Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Operatori di inserimento ed estrazione dagli stream»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Operatori aritmetici e di confronto
  2. Operatori di inserimento ed estrazione dagli stream
  3. Operatori di indicizzazione e chiamata di funzione
  4. Operatore di confronto a tre vie in C++20
← Torna a C++ Academy