Was genau ist std cout in c++?

3 Antworten

cout/stdout ist der Standardausgabekanal,. cin/stdin ist der Standardeingabekanal, cerr/stderr ist der Standardfehlerkanal. Zusamnmen sind das die 3 Standarddatenströme.

stdout ist ein Standard-Datenstrom, über den Daten ausgegeben werden können.
In früheren Computerzeiten war das einfach die Textausgabe auf dem Monitor - da gab's ja noch keine Fenster. Allenfalls hat man die Ausgabe in eine "echte" Datei umgeleitet, wobei unter Unix "Everything is a file" auch Geräte so wie eine Datei angesprochen werden.

Wie das Verhalten der jeweiligen Programmiersprache beigebracht wird, ist unterschiedlich implementiert. Hier ist beschrieben, wie es in C, C++, Java und Python abgebildet ist.

https://de.wikipedia.org/wiki/Standard-Datenstr%C3%B6me#Programmiersprachen_C_und_C++

Woher ich das weiß:Berufserfahrung – Langjährige Berufserfahrung als IT-Berater

Was ist jetzt eigentlich deine Frage?

Du musst iostream inkludieren, ja. Gerade in C++ wird nicht jedes Programm zwangsläufig mit solchen Streams arbeiten.

std::cout ist ein Objekt vom Typ ostream, das den Standard-Ausgabestream des Prozesses darstellt. Mit den auf diesem Typ überladenen Operatoren wie << kann man Daten rausschreiben lassen.


Testtest1320 
Beitragsersteller
 09.10.2023, 17:06
Was ist jetzt eigentlich deine Frage?

versteht man doch, warum cout keine funktion ist wie print() log() println usw.

mit parametern sondern was eigenes ist mit <<

Der rest war nur eine feststellung und nebenbei hab ich gefragt wieso das nicht gleich dabei ist und man iostream includen muss.
jemand meinte da es früher anders war und man keine fenster hatte, alles war eine konsole hab ich nur verstanden.

jo135  09.10.2023, 17:16
@Testtest1320

cout ist ein Objekt, Objekte haben Methoden. Das ist auch durchaus logisch so: statt einer Funktion den gewünschten Stream zu übergeben, wird hier auf dem Stream eine Methode aufgerufen.

So ist das in der OOP eben. In Java und den meisten anderen OOP-Sprachen funktioniert das genauso, in C++ gibt's halt überladene Operatoren, die nicht auf den ersten Blick wie Methodenaufrufe aussehen. Letztlich werden dabei aber natürlich auch Methoden aufgerufen.

KarlRanseierIII  09.10.2023, 20:57
@Testtest1320
std::cout << "Hello";

iist letzlich ein

std::cout.operator<<("Hello");

unbesehens der Frage, ob man den Aufruf so machen könnte. Funktional ist die Nutzung eines Operators im Kern ein Methodenaufruf.

Die Operatoren von Klassen sind in C++ überladbar, << und >> boten sich an, da sie auch als Shiftoperator dienen (Schieben). Man hat sich entschlossen beim ostream das Linksschieben so zu deuten, daß der Teil rechts davon nach links in den ostream geschoben wird.

std::cout ist ein std::ostream, entsprrechend gibt es da noch einiges mehr an Methoden.

Über C++ Streams und deren Intrinsic könnte man vermutlich fast ein eigenes Buch schreiben.

zalto  10.10.2023, 11:13
@Testtest1320

An der Notwendigkeit, einer Ausgabe mitzugeben, wohin sie ausgegeben werden soll, dürfte kein Zweifel bestehen.

Man kann das jetzt so ausgestalten, dass der Ausgebende aktiv ist und das Ausgabegerät passiv einfach entgegenzunehmen hat, was kommt.
Oder dass das Ausgabegerät aktiv entgegennimmt und damit die Regeln festlegt, was ihm in welcher Form übergeben werden soll.

Der Unterschied ist wie Briefkasten und Postschalter: In den Briefkasten kann man jederzeit alles mögliche einwerfen und das Beste hoffen.
Für den Schalter gelten strengere Regeln: Er ist nicht immer geöffnet, er nimmt nicht alles entgegen, prüft dafür und kommuniziert zurück.