<?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[Operator Overloading &amp;lt;&amp;lt;]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich würde gerne den &lt;&lt;-Operator überladen. Folgende Situation:</p>
<p>Ich habe unter anderem die Klassen Game und Player. Ich würde den &lt;&lt;-Operator gerne so überladen, dass ich in der Game.cpp nach std::cout &lt;&lt; player; eine Memberfunktion der Playerklasse aufgerufen wird (also das Ganze zu std::cout &lt;&lt; player.getName() wird).</p>
<p>Wie mache ich das? Wo muss ich die Überladung definieren? Bisheriger Stand:</p>
<p>In der Game-Klasse:</p>
<p>Deklaration im Headerfile:</p>
<pre><code class="language-cpp">friend std::ostream&amp; operator&lt;&lt;(std::ostream &amp;os, const ChessPlayer&amp; pl);
</code></pre>
<p>Im .cpp-File:</p>
<pre><code class="language-cpp">std::ostream&amp; ChessGame::operator&lt;&lt;(std::ostream&amp; os, const ChessPlayer&amp; pl)
{
  pl.fullNameToStream(os);
  return os;
}
</code></pre>
<p>In der Player-Klasse:</p>
<p>Deklaration im Header-File:</p>
<pre><code class="language-cpp">void fullNameToStream(std::ostream&amp;) const;
</code></pre>
<p>Im .cpp-File:</p>
<pre><code class="language-cpp">void ChessPlayer::fullNameToStream(std::ostream&amp;) const
{
  std::cout &lt;&lt; getFullName();
}
</code></pre>
<p>Edit:<br />
Das liefert mir bei der Ausführung von std::cout &lt;&lt; player den Fehler &quot;error: no match for 'operator&lt;&lt;' in 'std::cout &lt;&lt; player'.</p>
<p>Liebe Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304159/operator-overloading-lt-lt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 10 Aug 2026 00:49:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304159.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 31 May 2012 00:58:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator Overloading &amp;lt;&amp;lt; on Thu, 31 May 2012 01:00:05 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich würde gerne den &lt;&lt;-Operator überladen. Folgende Situation:</p>
<p>Ich habe unter anderem die Klassen Game und Player. Ich würde den &lt;&lt;-Operator gerne so überladen, dass ich in der Game.cpp nach std::cout &lt;&lt; player; eine Memberfunktion der Playerklasse aufgerufen wird (also das Ganze zu std::cout &lt;&lt; player.getName() wird).</p>
<p>Wie mache ich das? Wo muss ich die Überladung definieren? Bisheriger Stand:</p>
<p>In der Game-Klasse:</p>
<p>Deklaration im Headerfile:</p>
<pre><code class="language-cpp">friend std::ostream&amp; operator&lt;&lt;(std::ostream &amp;os, const ChessPlayer&amp; pl);
</code></pre>
<p>Im .cpp-File:</p>
<pre><code class="language-cpp">std::ostream&amp; ChessGame::operator&lt;&lt;(std::ostream&amp; os, const ChessPlayer&amp; pl)
{
  pl.fullNameToStream(os);
  return os;
}
</code></pre>
<p>In der Player-Klasse:</p>
<p>Deklaration im Header-File:</p>
<pre><code class="language-cpp">void fullNameToStream(std::ostream&amp;) const;
</code></pre>
<p>Im .cpp-File:</p>
<pre><code class="language-cpp">void ChessPlayer::fullNameToStream(std::ostream&amp;) const
{
  std::cout &lt;&lt; getFullName();
}
</code></pre>
<p>Edit:<br />
Das liefert mir bei der Ausführung von std::cout &lt;&lt; player den Fehler &quot;error: no match for 'operator&lt;&lt;' in 'std::cout &lt;&lt; player'.</p>
<p>Liebe Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217527</guid><dc:creator><![CDATA[WurzelAusZwei]]></dc:creator><pubDate>Thu, 31 May 2012 01:00:05 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Overloading &amp;lt;&amp;lt; on Thu, 31 May 2012 01:37:57 GMT]]></title><description><![CDATA[<p>Du hast den &lt;&lt; - Operator IN der Klasse überladen ? Du musst ihn außerhalb der Klasse überladen, genauso wie du es gerade getan hast - nur eben nicht in der Klasse. Du hast in Klassen immer noch ein weiteres Argument, this-pointer eben. Das siehst du selber zwar nicht direkt, aber der compiler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217529</guid><dc:creator><![CDATA[cvcv]]></dc:creator><pubDate>Thu, 31 May 2012 01:37:57 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Overloading &amp;lt;&amp;lt; on Thu, 31 May 2012 01:53:23 GMT]]></title><description><![CDATA[<p>Aber irgendwo muss ich noch einen Fehler haben, denn wenn ich die Überladung als Member in der Playerklasse deklariere, klappt es auch nicht:</p>
<pre><code class="language-cpp">Headerfile:
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os);

.cpp-File:
std::ostream&amp; ChessPlayer::operator&lt;&lt;(std::ostream&amp; os)
{
  os &lt;&lt; getFullName();
  return os;
}
</code></pre>
<p>Das müsste ja eigentlich auch klappen, es kommt allerdings &quot;error: no match for 'operator&lt;&lt;' in 'std::cout &lt;&lt; player'&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217532</guid><dc:creator><![CDATA[WurzelAusZwei]]></dc:creator><pubDate>Thu, 31 May 2012 01:53:23 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Overloading &amp;lt;&amp;lt; on Thu, 31 May 2012 01:59:17 GMT]]></title><description><![CDATA[<p>WurzelAusZwei schrieb:</p>
<blockquote>
<pre><code class="language-cpp">friend std::ostream&amp; operator&lt;&lt;(std::ostream &amp;os, const ChessPlayer&amp; pl);
</code></pre>
</blockquote>
<p>Ohne &quot;friend&quot; wäre das die Deklaration einer Memberfunktion. (Dann würde der Compiler allerdings auch sempern, weil ein Member operator &lt;&lt; nur einen Parameter nehmen kann, nämlich den rechten Operanden).</p>
<p>Mit &quot;friend&quot; ist es allerdings die Deklaration einer freien Funktion, die im Namespace lebt der auch die Klasse ChessGame enthält.</p>
<p>WurzelAusZwei schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::ostream&amp; ChessGame::operator&lt;&lt;(std::ostream&amp; os, const ChessPlayer&amp; pl)
{
  pl.fullNameToStream(os);
  return os;
}
</code></pre>
</blockquote>
<p>Und das hier ist der Versuch eine Memberfunktion ChessGame::operator &lt;&lt; zu implementieren.<br />
Die wurde aber nicht deklariert - du hast ja nur mit &quot;friend&quot; eine freie Funktion deklariert.</p>
<p>Also =&gt; mach einfach das &quot;ChessGame::&quot; weg, und es sollte passen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217535</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 31 May 2012 01:59:17 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Overloading &amp;lt;&amp;lt; on Thu, 31 May 2012 02:02:18 GMT]]></title><description><![CDATA[<p>WurzelAusZwei schrieb:</p>
<blockquote>
<p>Aber irgendwo muss ich noch einen Fehler haben, denn wenn ich die Überladung als Member in der Playerklasse deklariere, klappt es auch nicht:</p>
<pre><code class="language-cpp">Headerfile:
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os);

.cpp-File:
std::ostream&amp; ChessPlayer::operator&lt;&lt;(std::ostream&amp; os)
{
  os &lt;&lt; getFullName();
  return os;
}
</code></pre>
<p>Das müsste ja eigentlich auch klappen, es kommt allerdings &quot;error: no match for 'operator&lt;&lt;' in 'std::cout &lt;&lt; player'&quot;.</p>
</blockquote>
<p>Jo, das kann auch nicht funktionieren.<br />
Mit <code>std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os);</code> in der Klasse deklarierst du ja einen operator &lt;&lt; der <em>linkerhand</em> nen <code>ChessPlayer</code> nimmt und <em>rechterhand</em> nen <code>ostream</code> .</p>
<p>Den müsstest du dann mit <code>player &lt;&lt; std::cout</code> aufrufen, also genau verkehrt herum.</p>
<p>Genau das ist auch der Grund warum man &quot;Stream-Operatoren&quot; nicht als Member machen kann. Weil die Reihenfolge der Operanden nicht passt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217536</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 31 May 2012 02:02:18 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Overloading &amp;lt;&amp;lt; on Thu, 31 May 2012 02:03:57 GMT]]></title><description><![CDATA[<p>Jetzt hab ich's verstanden, vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217537</guid><dc:creator><![CDATA[WurzelAusZwei]]></dc:creator><pubDate>Thu, 31 May 2012 02:03:57 GMT</pubDate></item><item><title><![CDATA[Reply to Operator Overloading &amp;lt;&amp;lt; on Thu, 31 May 2012 07:37:02 GMT]]></title><description><![CDATA[<p>Ohne Eigenwerbugn machen zu wollen, wir haben Artikel zur Operatorüberladung im Magazin: <a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20%28Teil%201%29" rel="nofollow">http://magazin.c-plusplus.net/artikel/�berladung von Operatoren in CPlusPlus (Teil 1)</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2217571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2217571</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 31 May 2012 07:37:02 GMT</pubDate></item></channel></rss>