C++ Academy · Lektion

Operatorer til streamindsættelse og -udtræk

Lær Deres typer at fungere sammen med std::cout via >

Lektion 2 af 414 trin

Operatorer til streamindsættelse og -udtræk er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvorfor overbelaste << og >>

Lær dine typer at fungere sammen med std::cout og std::cin ved at overbelaste strømoperatorerne.

Indsættelsesoperatoren <<

Definér den som en fri funktion, der tager en udstrøm som reference. Returnér strømmen, så kædning bliver mulig.

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)

Hvorfor en fri funktion?

Hvis du skrev den som en medlemsfunktion, skulle venstre operand være en Point — det er umuligt, fordi vi skal have std::ostream til venstre. Frie funktioner understøtter begge rækkefølger.

Udtræksoperatoren >>

Definér den til læsning fra inddatastrømme. Validér inddata, og sæt failbit ved fejl.

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;
}

Indstilling af strømmens fejltilstand

Hvis fortolkningen mislykkes, skal du kalde is.setstate(std::ios::failbit). Den kaldende kode kan registrere fejlen med !is eller is.fail().

Friend-erklæringer

Hvis operatoren skal have adgang til private medlemmer, skal du erklære den som friend inde i klassen.

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

Skabelonbaserede strømtyper

For størst mulig portabilitet skal du bruge en skabelonparameter for tegntypen. Det er nyttigt til strømme med brede tegn.

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

Kædning

Når du returnerer strømmen, kan brugere kæde operationer sammen.

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

Tilpasset formatering

Brug std::ios::fmtflags eller C++20-std::format til avanceret formatering. Strømme er enklere, men sværere at lokalisere.

JSON-lignende resultat

Du kan kombinere forskellige formateringsvalg i din operator. Skriv hjælpefunktioner til komplekse resultater.

Læsning af flere linjer

Brug std::getline til linjebaseret læsning, og fortolk derefter med en stringstream — så holder du din operator>> enkel.

Tip om ydeevne

Ved logning med meget høj gennemstrømning bør du foretrække dedikerede biblioteker (spdlog, fmt) — de er betydeligt hurtigere end strømme.

Hurtigt tjek

Hvorfor defineres operator<< for en brugerdefineret type som en fri funktion i stedet for som en medlemsfunktion?

Opsummering

Overbelast operator<< og operator>> som frie funktioner, der tager strømmen som reference. Returnér strømmen, så operationer kan kædes sammen. Sæt failbit ved fortolkningsfejl. Brug friend, når der er behov for adgang til private medlemmer.

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Operatorer til streamindsættelse og -udtræk” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Operatorer til streamindsættelse og -udtræk”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Operatorer til streamindsættelse og -udtræk”?

Lær Deres typer at fungere sammen med std::cout via > Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Operatorer til streamindsættelse og -udtræk”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Aritmetiske operatorer og sammenligningsoperatorer
  2. Operatorer til streamindsættelse og -udtræk
  3. Indeks- og funktionskaldsoperatorer
  4. Trevejs-sammenligningsoperatoren i C++20
← Tilbage til C++ Academy