<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator?]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>möchte ich einen Text auf der Konsole ausgeben, kann man das mit der cout-Klasse umsetzen:</p>
<pre><code>cout &lt;&lt; &quot;Hallo!&quot; &lt;&lt; endl;
</code></pre>
<p>Doch woher kommt der &lt;&lt;-Operator? Wieso verwendet man keine Parameterübergabe an eine Funktion? Wie kann man eine eigene Klasse programmieren, die den &lt;&lt;-Operator verwendet?</p>
<p>Dummkopf <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241007/was-für-einen-sinn-hat-der-lt-lt-operator</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 17:31:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241007.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 May 2009 14:39:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator? on Thu, 14 May 2009 14:39:12 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>möchte ich einen Text auf der Konsole ausgeben, kann man das mit der cout-Klasse umsetzen:</p>
<pre><code>cout &lt;&lt; &quot;Hallo!&quot; &lt;&lt; endl;
</code></pre>
<p>Doch woher kommt der &lt;&lt;-Operator? Wieso verwendet man keine Parameterübergabe an eine Funktion? Wie kann man eine eigene Klasse programmieren, die den &lt;&lt;-Operator verwendet?</p>
<p>Dummkopf <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710537</guid><dc:creator><![CDATA[Dummkopf]]></dc:creator><pubDate>Thu, 14 May 2009 14:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator? on Thu, 14 May 2009 14:44:13 GMT]]></title><description><![CDATA[<p>Das ist ein Stream. Google mal danach...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710543</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 14 May 2009 14:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator? on Thu, 14 May 2009 14:51:19 GMT]]></title><description><![CDATA[<p>Dazu haben wir einen Artikel im Magazin:<br />
<a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20(Teil%201)" rel="nofollow">Überladung von Operatoren (Teil 1)</a></p>
<p>Teil 2 ist gerade erst erschienen, ist noch nicht mal im Inhaltsverzeichnis aufgeführt. Daher erstmal nur hier zu finden:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-240706.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-240706.html</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710547</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 14 May 2009 14:51:19 GMT</pubDate></item><item><title><![CDATA[Reply to Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator? on Thu, 14 May 2009 15:19:46 GMT]]></title><description><![CDATA[<p>Die anderen beiden Fragen wurden ja schon beantwortet:</p>
<p>Dummkopf schrieb:</p>
<blockquote>
<p>Wieso verwendet man keine Parameterübergabe an eine Funktion?</p>
</blockquote>
<p>Du denkst wahrscheinlich an sowas wie printf in C. Das Problem bei der Übergabe an eine Funktion ist zweierlei:</p>
<ol>
<li>Die Übergabe: Die auszugebenen Daten müssen irgendwie an die Funktion übergeben werden. Eigentlich müsste man für jeden Datentyp eine neue Funktion schreiben, damit man ihr den entsprechenden Typ übergeben kann. Das ist aber extrem unpraktisch. Bei der printf-Funktion behilft man sich dadurch, dass die Funktion erstmal alles annimmt und man ihr im Formatstring angibt, was man da übergeben hat. Das ist aber kein sicheres Konzept, da man nicht sicher wissen kann, ob der Programmierer nicht gelogen oder sich vertan hat und die übergebenen Daten auch wirklich von dem Typ sind den er angegeben hat.</li>
<li>Die Ausgabe: C kennt eine handvoll primitiver Datentypen und printf ist in der Lage diese auszugeben. Was ist aber in C++, wo man eigene Datentypen hat? Im Prinzip müsste man für jede Klasse ein eigenes printf schreiben. Das entspricht aber nicht der objektorientierten Denkweise: Die Daten sollten selber wissen, wie sie ausgegeben werden.</li>
</ol>
<p>Und beide Probleme löst der &lt;&lt; Operator: Indem man seinen eigenen Klassen einen &lt;&lt; Operator verpasst, teilt man mit, wie die Daten ausgegeben werden sollen. Und dies stellt auch sicher, dass nur ausgebbare Daten ausgegeben werden - und das auf korrekte Weise.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710559</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 14 May 2009 15:19:46 GMT</pubDate></item><item><title><![CDATA[Reply to Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator? on Thu, 14 May 2009 16:35:33 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Eigentlich müsste man für jeden Datentyp eine neue Funktion schreiben, damit man ihr den entsprechenden Typ übergeben kann. Das ist aber extrem unpraktisch.</p>
</blockquote>
<p>Wird in C++ aber genau so gehandhabt. Daher ein wenig ein seltsames Argument <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Die Ausgabe: C kennt eine handvoll primitiver Datentypen und printf ist in der Lage diese auszugeben. Was ist aber in C++, wo man eigene Datentypen hat? Im Prinzip müsste man für jede Klasse ein eigenes printf schreiben.</p>
</blockquote>
<p>Das deutlich grössere Problem an printf ist, dass es nur primitive Typen behandeln kann, denn über die Ellipse kann man nur primitive Typen übergeben. In C++ schreibt man schliesslich auch für jede Ausgabe der eigenen Klasse eine eigene Funktion.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Das entspricht aber nicht der objektorientierten Denkweise: Die Daten sollten selber wissen, wie sie ausgegeben werden.</p>
</blockquote>
<p>Das entspricht auch nicht der objektorientierten Denkweise. Die Daten sollte überhaupt nicht wissen, wie sie ausgegeben werden. Das ist normalerweise die Aufgabe der View. Siehe MVC:<br />
<a href="http://de.wikipedia.org/wiki/MVC" rel="nofollow">http://de.wikipedia.org/wiki/MVC</a></p>
<p>Die C++ Stream sind nicht optimal. Das wurde schon mehrmals erwähnt. Aber sie sind ein möglicher Lösungsansatz.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Und beide Probleme löst der &lt;&lt; Operator:</p>
</blockquote>
<p>Wie oben erläutert stimmt dies nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710588</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 14 May 2009 16:35:33 GMT</pubDate></item><item><title><![CDATA[Reply to Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator? on Thu, 14 May 2009 18:49:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a>: Bist du dir sicher, dass das MVC-Pattern in C++ bzw. bei der cout-Klasse umgesetzt ist? Möchte man das MVC-Pattern verwenden, muss man erst eine Instaz von der Controller-Klasse erstellen und festlegen, womit die Klasse interagieren soll. Das cout ist in meinen Augen nichts weiter als eine Klasse.</p>
<p>Aber warum wird nicht eine <strong>generische</strong> Klasse verwendet, womit man alle Typen anzeigen lassen kann? Wie programmiert man den eine Klasse, mit der man auch den &lt;&lt;- bzw. &gt;&gt;-Operator verwenden kann?</p>
<p>Dummkopf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710647</guid><dc:creator><![CDATA[Dummkopf]]></dc:creator><pubDate>Thu, 14 May 2009 18:49:13 GMT</pubDate></item><item><title><![CDATA[Reply to Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator? on Thu, 14 May 2009 19:18:50 GMT]]></title><description><![CDATA[<p>Dazu müsstest du dir mal die Grundlagen anschauen...<br />
Und Dravere hat dir auch schon einen Link zu dem Magazin gegeben wo das beschrieben steht.<br />
Ansonsten gebe ich dir soweit Recht das MVC ein Pattern ist aber das nicht wirklich etwas direkt mit Objektorientierung zu tun hat... Es ist, wie die meisten Pattern, unabhängig von der Sprache...<br />
Eine generische Klasse könnte man auch über Templates realisieren die sowas ausgibt, da müsste man aber jedes mal den Typ mit angeben, was doof ist wenn man mehrere Typen ausgeben will...<br />
Ich bin mit cout und cin sehr zufrieden da es Typsicher ist und auch mit komplexen Datentypen und Klassen funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710675</guid><dc:creator><![CDATA[Skalli]]></dc:creator><pubDate>Thu, 14 May 2009 19:18:50 GMT</pubDate></item><item><title><![CDATA[Reply to Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator? on Thu, 14 May 2009 19:34:48 GMT]]></title><description><![CDATA[<p>Dummkopf schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a>: Bist du dir sicher, dass das MVC-Pattern in C++ bzw. bei der cout-Klasse umgesetzt ist?</p>
</blockquote>
<p>Zuerst muss du mir zeigen, wo ich sowas gesagt habe. Ich habe nur SeppJ korrigiert, was seine Ansicht von Objektorientierung angeht. Das hatte nichts mit C++ oder <code>std::cout</code> zu tun.</p>
<p>Dummkopf schrieb:</p>
<blockquote>
<p>Das cout ist in meinen Augen nichts weiter als eine Klasse.</p>
</blockquote>
<p>Nein, <code>std::cout</code> ist ein Objekt von folgendem oder davon abgeleitetem Typ:<br />
<code>std::basic_ostream&lt;char&gt;</code></p>
<p>Dummkopf schrieb:</p>
<blockquote>
<p>Aber warum wird nicht eine <strong>generische</strong> Klasse verwendet, womit man alle Typen anzeigen lassen kann?</p>
</blockquote>
<p>Und wie willst du das umsetzen? Woher soll diese Klasse wissen, wie man zum Beispiel ein Rechteck ausgibt?</p>
<p>Dummkopf schrieb:</p>
<blockquote>
<p>Wie programmiert man den eine Klasse, mit der man auch den &lt;&lt;- bzw. &gt;&gt;-Operator verwenden kann?</p>
</blockquote>
<p>Lies ein C++ Buch, lies ein C++ Tutorial oder lies den Artikel, welchen ich verlinkt habe.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710693</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 14 May 2009 19:34:48 GMT</pubDate></item><item><title><![CDATA[Reply to Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator? on Thu, 14 May 2009 19:51:26 GMT]]></title><description><![CDATA[<p>Nein, cout ist eine Klasse. Ein Objekt ist es, wenn eine Instanz der Klasse erstellt worden ist. Man könnte statt einer generischen Klasse ein Objekt-Typ doch als Parameter einer Funktion verwenden.</p>
<p>Aber was solls. Danke für eure Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710707</guid><dc:creator><![CDATA[Dummkopf]]></dc:creator><pubDate>Thu, 14 May 2009 19:51:26 GMT</pubDate></item><item><title><![CDATA[Reply to Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator? on Thu, 14 May 2009 20:03:08 GMT]]></title><description><![CDATA[<p>Dummkopf schrieb:</p>
<blockquote>
<p>Nein, cout ist eine Klasse.</p>
</blockquote>
<p>Nein, ist es nicht.</p>
<p>Dummkopf schrieb:</p>
<blockquote>
<p>Ein Objekt ist es, wenn eine Instanz der Klasse erstellt worden ist.</p>
</blockquote>
<p>Und <code>std::cout</code> ist eine Instanz der Klasse std::basic_ostream&lt;char&gt; oder einer davon abgeleiteten Klasse. Folglich ist <code>std::cout</code> ein Objekt.</p>
<p>Dummkopf schrieb:</p>
<blockquote>
<p>Man könnte statt einer generischen Klasse ein Objekt-Typ doch als Parameter einer Funktion verwenden.</p>
</blockquote>
<p>Und weiter? Dann müsstest du ja immer noch irgendwie definieren, wie dieser Objekttyp behandelt werden soll.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710714</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 14 May 2009 20:03:08 GMT</pubDate></item><item><title><![CDATA[Reply to Was für einen Sinn hat der &amp;lt;&amp;lt;-Operator? on Thu, 14 May 2009 20:09:27 GMT]]></title><description><![CDATA[<p>Nicht böse sein, aber da scheint es noch ganz arg am Grundlagenverständnis zu hapern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710716</guid><dc:creator><![CDATA[Skalli]]></dc:creator><pubDate>Thu, 14 May 2009 20:09:27 GMT</pubDate></item></channel></rss>