Was bedeutet "" und "" in C ++ für cout / cin?

8

Verzeihen Sie, dass ich möglicherweise eine ziemlich einfache Frage gestellt habe, aber was bedeutet der Einfügeoperator eigentlich in einem Programm? (zB cout << / cin >> )

    
user825962 13.10.2011, 16:28
quelle

5 Antworten

10

Es hängt davon ab, wie Sie es für Ihre Klasse überladen.

  • Bei std::cout wird << verwendet, um in die Standardausgabe zu schreiben. >> wird nicht für std::cout überladen. Also würde std::cout >> x einen Kompilierungsfehler geben.

  • Bei std::cin wird >> verwendet, um von der Standardeingabe zu lesen. << wird nicht für std::cout überladen. Also würde std::cin << x einen Kompilierungsfehler geben.

  • Für Ihre benutzerdefinierte Klasse können Sie << oder >> oder beides überladen, und in der Funktion können Sie alles tun, was Sie möchten. Im folgenden Code überlade ich beispielsweise << für std::vector<T> , um dem Vektor Elemente hinzuzufügen,

    %Vor%

    Jetzt kann ich diese Überladung verwenden, um dies zu schreiben:

    %Vor%

    Alle Ganzzahlen werden dem Vektor hinzugefügt! Siehe Online-Demo: Ссылка

    Ebenso können wir >> für std::vector<T> überladen, um alle darin enthaltenen Elemente als

    zu drucken %Vor%

    Und jetzt können wir den Vektor als:

    drucken %Vor%

    Online-Demo: Ссылка

Der Punkt ist, dass Sie diese Operatoren beliebig überladen können. Wie verrückt oder gesund die Überlastung und ihre Verwendung aussehen würde, liegt an Ihnen. Zum Beispiel würde die Syntax v >> std::cout für die meisten Programmierer verrückt aussehen, wie ich denke. Eine bessere und wahrscheinlich vernünftige Überlastung wäre für std::ostream als:

%Vor%

Jetzt können Sie dies schreiben:

%Vor%

Demo: Ссылка

    
Nawaz 13.10.2011 16:34
quelle
2

Sie sind bitweise Shift-Operatoren ( << ist eine Verschiebung nach links, >> ist eine Verschiebung nach rechts). Sie sind auch häufig als Streaming-Operatoren überlastet ( << bedeutet dann stream out, >> stream) - mit Stream-Typ auf der linken Seite (zB std::ostream oder std::istream ) und jedem anderen Typ auf der rechten Seite .

    
Cat Plus Plus 13.10.2011 16:34
quelle
1

Es schreibt oder liest Objekte;

%Vor%

Es ist für alle Standardtypen überladen.
Und die meisten Leute überschreiben sie für ihre eigenen benutzerdefinierten Typen.

Hinweis: Die linke Seite des Operators kann ein beliebiger Stream-Typ sein (z. B. std :: fstream oder std :: stringstream), sodass er zu einem verallgemeinerten Mechanismus für die Serialisierung von Objekten wird.

    
Martin York 13.10.2011 16:31
quelle
0

Sie sind oft überlastet und werden für Streams verwendet. & lt; & lt; eigentlich ist ein lef shift operator. & gt; & gt; ist eigentlich ein Rechts-Shift-Operator.

    
Norbert Willhelm 13.10.2011 16:34
quelle
0

& lt; & lt; und & gt; & gt; sind einfache Operatoren, genau wie +, -, =, ==, + =, / = etc., erhalten Sie die Übung. Das bedeutet, es hängt von dem Objekt / der Struktur ab, mit der Sie es verwenden. Mit cout und cin sind dies Lese- / Schreiboperatoren, aber Sie könnten den Operator möglicherweise überlasten, etwas völlig anderes zu machen.

%Vor%

Nun, ich sage nicht, dass jemand dies tun sollte, aber dies würde zu einem Zusatz führen, wenn Sie ein Myclass-Objekt mit diesem Operator verwenden würden. Also, wie Sie sehen können: Was machen Sie mit "& lt; & lt;" oder "& gt; & gt;" hängt davon ab, wie der Bediener überlastet ist.

    
Aerius 13.10.2011 16:36
quelle

Tags und Links