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
- Arithmetische und Vergleichsoperatoren
- Stream-Einfüge- und Extraktionsoperatoren
- Index- und Funktionsaufrufoperatoren
- Drei-Wege-Vergleichsoperator in C++20