C++ Academy · leksjon

Operatorer for innsetting og uthenting fra strømmer

Lær typene Deres å fungere sammen med std::cout via >.

Leksjon 2 av 414 trinn

Operatorer for innsetting og uthenting fra strømmer er en gratis leksjon i C++ Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i C++ Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Hvorfor overbelaste << og >>

Gjør typene dine kompatible med std::cout og std::cin ved å overbelaste strømoperatorene.

Innsettingsoperatoren <<

Definer den som en fri funksjon som tar en utdatastrøm som referanse. Returner strømmen for å muliggjøre kjeding.

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 funksjon?

Hvis du skrev den som en medlemsfunksjon, måtte venstre operand vært en Point — det er umulig fordi vi trenger std::ostream til venstre. Frie funksjoner støtter begge operandrekkefølger.

Uttrekksoperatoren >>

Definer den for lesing fra inndatastrømmer. Valider innholdet, og angi failbit ved feil.

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

Angi strømmenes feiltilstand

Hvis tolkingen mislykkes, kaller du is.setstate(std::ios::failbit). Kalleren kan oppdage feilen med !is eller is.fail().

friend-deklarasjoner

Hvis operatoren trenger tilgang til private medlemmer, deklarerer du den som en friend inne i klassen.

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

Malbaserte strømtyper

For best mulig portabilitet bruker du tegn-typen som malparameter. Dette er nyttig for strømmer med bredtegn.

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

Kjedekobling

Ved å returnere strømmen kan brukere kjede sammen operasjoner.

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

Tilpasset formatering

Bruk std::ios::fmtflags eller C++20-std::format for avansert formatering. Strømmer er enklere, men vanskeligere å tilpasse ulike språk.

JSON-lignende utdata

Du kan kombinere ulike formateringsvalg i operatoren. For komplekse utdata bør du skrive hjelpefunksjoner.

Lese flere linjer

Bruk std::getline til linjebasert lesing, og analyser deretter innholdet med en stringstream — da holder du operator>> enkel.

Ytelsestips

For logging med svært høy gjennomstrømning bør du foretrekke dedikerte biblioteker (spdlog, fmt) — de yter betydelig bedre enn strømmer.

Hurtigsjekk

Hvorfor defineres operator<< for en brukertype som en fri funksjon og ikke som en medlemsfunksjon?

Oppsummering

Overbelast operator<< og operator>> som frie funksjoner som tar strømmen som referanse. Returner strømmen for kjeding. Angi failbit ved feil under analyse. Bruk friend når det er nødvendig med tilgang til private medlemmer.

Gratis å komme i gang

Lær deg C++ med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «Operatorer for innsetting og uthenting fra strømmer» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien C++ Academy, inkludert «Operatorer for innsetting og uthenting fra strømmer», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i C++ Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Operatorer for innsetting og uthenting fra strømmer»?

Lær typene Deres å fungere sammen med std::cout via >. Du øver på C++ Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med C++ Academy?

Ingen tidligere erfaring er nødvendig. C++ Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.

Hvor lang tid tar leksjonen «Operatorer for innsetting og uthenting fra strømmer»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne C++ Academy-leksjonen?

Ja. Alle C++ Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Aritmetiske operatorer og sammenligningsoperatorer
  2. Operatorer for innsetting og uthenting fra strømmer
  3. Indekserings- og funksjonskalloperatorer
  4. Treveis sammenligningsoperator i C++20
← Tilbake til C++ Academy