0Pricing
C++ Academy · Lektion

Stream-Einfüge- und Extraktionsoperatoren

Ermöglichen Sie Ihren Typen die Zusammenarbeit mit std::cout über >.

Stream-Einfüge- und Extraktionsoperatoren ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum << und >> überladen

Bringen Sie Ihren Typen bei, mit std::cout und std::cin zusammenzuarbeiten, indem Sie die Stream-Operatoren überladen.

Der Einfügeoperator <<

Definieren Sie ihn als freie Funktion, die einen Ausgabestream als Referenz entgegennimmt. Geben Sie den Stream zurück, damit Verkettungen möglich sind.

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)

Warum eine freie Funktion?

Wenn Sie ihn als Member geschrieben hätten, müsste der linke Operand ein Point sein — das ist unmöglich, weil links std::ostream benötigt wird. Freie Funktionen unterstützen beide Operandenreihenfolgen.

Der Extraktionsoperator >>

Definieren Sie ihn zum Lesen aus Eingabestreams. Validieren Sie die Eingabe und setzen Sie bei einem Fehler das failbit.

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

Fehlerzustand des Streams setzen

Wenn das Parsen fehlschlägt, rufen Sie is.setstate(std::ios::failbit) auf. Der Aufrufer kann den Fehler mit !is oder is.fail() erkennen.

Friend-Deklarationen

Wenn der Operator Zugriff auf private Member benötigt, deklarieren Sie ihn innerhalb der Klasse als friend.

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

Stream-Typen mit Templates

Für maximale Portabilität parametrisieren Sie den Typ des Zeichens mit einem Template. Das ist für Streams mit Breitzeichen nützlich.

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

Verkettungen

Durch die Rückgabe des Streams können Benutzer Operationen verketten.

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

Benutzerdefinierte Formatierung

Verwenden Sie std::ios::fmtflags oder das C++20-Feature std::format für fortgeschrittene Formatierung. Streams sind einfacher, aber schwieriger zu lokalisieren.

JSON-ähnliche Ausgabe

Sie können Formatierungsoptionen in Ihrem Operator kombinieren. Für komplexe Ausgaben sollten Sie Hilfsfunktionen schreiben.

Mehrere Zeilen lesen

Verwenden Sie std::getline zum zeilenweisen Lesen und parsen Sie anschließend mit einem Stringstream — so bleibt Ihr operator>> einfach.

Leistungstipp

Bei Protokollierung mit sehr hohem Durchsatz sollten Sie dedizierte Bibliotheken wie spdlog oder fmt bevorzugen — sie sind deutlich schneller als Streams.

Kurzer Test

Warum wird operator<< für einen benutzerdefinierten Typ als freie Funktion und nicht als Member definiert?

Zusammenfassung

Überladen Sie operator<< und operator>> als freie Funktionen, die den Stream als Referenz entgegenehmen. Geben Sie den Stream für Verkettungen zurück. Setzen Sie bei Parsing-Fehlern das failbit. Verwenden Sie friend, wenn Zugriff auf private Member erforderlich ist.

Häufig gestellte Fragen

Ist die Lektion „Stream-Einfüge- und Extraktionsoperatoren“ kostenlos?

Ja — der vollständige Text von „Stream-Einfüge- und Extraktionsoperatoren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Stream-Einfüge- und Extraktionsoperatoren“?

Ermöglichen Sie Ihren Typen die Zusammenarbeit mit std::cout über >. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Stream-Einfüge- und Extraktionsoperatoren“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Arithmetische und Vergleichsoperatoren
  2. Stream-Einfüge- und Extraktionsoperatoren
  3. Index- und Funktionsaufrufoperatoren
  4. Drei-Wege-Vergleichsoperator in C++20
← Zurück zu C++ Academy