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 >>
)
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,
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
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:
Jetzt können Sie dies schreiben:
%Vor%Demo: Ссылка
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 .
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.
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.
& 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.
Tags und Links c++