<?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[Problem beim Überladen des &amp;amp; Operators]]></title><description><![CDATA[<p>Hallo erstmal,</p>
<p>ich soll für die Uni ein Klasse schreiben, mit der man Matrizen verarbeiten kann. Die Klasse funktioniert soweit, auch, wenn sie vom Design vielleicht nicht wirklich &quot;schön&quot; ist. Nun soll ich für diese Klasse den &amp; Operator (Bitweise AND) global so überladen, dass der Inhalt der beiden Objekte vertauscht wird.</p>
<p>Nun fangen aber meine Probleme an. Hier mal ein Beispielcode, wie das ganze funktionieren soll</p>
<pre><code class="language-cpp">class QuadMatrix{...}
...
...
QuadMatrix matrix1, matrix2;
matrix1.insert(); //Die erste Matrix mit Inhalt füllen
matrix2.insert(); //Die zweite Matrix mit Inhalt füllen

matrix1 &amp; matrix2; //Hiernach hat matrix1 den Inhalt von matrix2 und umgekehrt
</code></pre>
<p>Bei der Umsetzung stoße ich (natürlich?) an das Problem, dass die Operatorfunktion einen Rückgabewert verlangt. Vielleicht habe ich da noch ein Verständnisproblem, aber so, wie der Operator gedacht ist, soll er ja nur die beiden Operanden vertauschen, nicht aber, wie z.B. bei arithmetischen Operatoren, ein neues Ergebnis liefern. Hat vielleicht jemand eine Idee, wie ich an das Problem richtig heran gehe?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/231719/problem-beim-überladen-des-amp-operators</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 18:37:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/231719.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Jan 2009 12:41:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem beim Überladen des &amp;amp; Operators on Wed, 14 Jan 2009 12:41:07 GMT]]></title><description><![CDATA[<p>Hallo erstmal,</p>
<p>ich soll für die Uni ein Klasse schreiben, mit der man Matrizen verarbeiten kann. Die Klasse funktioniert soweit, auch, wenn sie vom Design vielleicht nicht wirklich &quot;schön&quot; ist. Nun soll ich für diese Klasse den &amp; Operator (Bitweise AND) global so überladen, dass der Inhalt der beiden Objekte vertauscht wird.</p>
<p>Nun fangen aber meine Probleme an. Hier mal ein Beispielcode, wie das ganze funktionieren soll</p>
<pre><code class="language-cpp">class QuadMatrix{...}
...
...
QuadMatrix matrix1, matrix2;
matrix1.insert(); //Die erste Matrix mit Inhalt füllen
matrix2.insert(); //Die zweite Matrix mit Inhalt füllen

matrix1 &amp; matrix2; //Hiernach hat matrix1 den Inhalt von matrix2 und umgekehrt
</code></pre>
<p>Bei der Umsetzung stoße ich (natürlich?) an das Problem, dass die Operatorfunktion einen Rückgabewert verlangt. Vielleicht habe ich da noch ein Verständnisproblem, aber so, wie der Operator gedacht ist, soll er ja nur die beiden Operanden vertauschen, nicht aber, wie z.B. bei arithmetischen Operatoren, ein neues Ergebnis liefern. Hat vielleicht jemand eine Idee, wie ich an das Problem richtig heran gehe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1645283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645283</guid><dc:creator><![CDATA[Berufspenner]]></dc:creator><pubDate>Wed, 14 Jan 2009 12:41:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Überladen des &amp;amp; Operators on Wed, 14 Jan 2009 12:47:20 GMT]]></title><description><![CDATA[<p>Berufspenner schrieb:</p>
<blockquote>
<p>...aber so, wie der Operator gedacht ist, soll er ja nur die beiden Operanden vertauschen, nicht aber, wie z.B. bei arithmetischen Operatoren, ein neues Ergebnis liefern.</p>
</blockquote>
<p>Genau deshalb solltest du den Operator dafür auch nicht missbrauchen. Was spricht gegen ein einfaches matrix1.Swap( matrix2 ), oder ::Swap( matrix1, matrix2 )?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1645288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645288</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 14 Jan 2009 12:47:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Überladen des &amp;amp; Operators on Wed, 14 Jan 2009 12:49:59 GMT]]></title><description><![CDATA[<p>rückgabewert wegmachen mit void.</p>
<pre><code class="language-cpp">void operator&amp;(QuadMatrix&amp; a,QuadMatrix &amp;b)
{
   //tausch tausch tausch
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1645290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645290</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 14 Jan 2009 12:49:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Überladen des &amp;amp; Operators on Wed, 14 Jan 2009 12:54:59 GMT]]></title><description><![CDATA[<p>Solange du das nur selber benötigst, geht es noch knapp. Wenn das Matrix-Framework aber auch anderen Programmierern zur Verfügung gestellt werden soll, kann das für Verwirrung sorgen.</p>
<p>Die Idee hinter Operatorüberladung ist einfache Handhabung, und dazu gehört auch, dass die Semantik selbsterklärend ist. Wenn man für eine Operation keinen Operator hat, der gut passt, wie zum Beispiel zum Tausch, ist eine Funktion viel sinnvoller. Wenn man &quot;Swap&quot; sieht, ist einem auf den ersten Blick klar, was die Funktion macht. Bei <code>operator&amp;</code> kann man auch leicht auf die Idee kommen, dass z.B. elementweise UND angewendet wird. An einen Tausch denkt man dabei sicher als Letztes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1645293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645293</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 14 Jan 2009 12:54:59 GMT</pubDate></item><item><title><![CDATA[Reply to Problem beim Überladen des &amp;amp; Operators on Wed, 14 Jan 2009 13:10:08 GMT]]></title><description><![CDATA[<p>David_pb schrieb:</p>
<blockquote>
<p>Berufspenner schrieb:</p>
<blockquote>
<p>...aber so, wie der Operator gedacht ist, soll er ja nur die beiden Operanden vertauschen, nicht aber, wie z.B. bei arithmetischen Operatoren, ein neues Ergebnis liefern.</p>
</blockquote>
<p>Genau deshalb solltest du den Operator dafür auch nicht missbrauchen. Was spricht gegen ein einfaches matrix1.Swap( matrix2 ), oder ::Swap( matrix1, matrix2 )?</p>
</blockquote>
<p>Ganz einfach: die Aufgabenstellung <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>volkard schrieb:</p>
<blockquote>
<p>rückgabewert wegmachen mit void.</p>
<pre><code class="language-cpp">void operator&amp;(QuadMatrix&amp; a,QuadMatrix &amp;b)
{
   //tausch tausch tausch
}
</code></pre>
</blockquote>
<p>Ok, dann war es wirklich mangelndes Verständnis, weil ich dachte, dass die Operatorfunktion zwingend vom Typ der Klasse sein muss. Jetzt läuft alles bestens. Danke dafür <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1645313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1645313</guid><dc:creator><![CDATA[Berufspenner]]></dc:creator><pubDate>Wed, 14 Jan 2009 13:10:08 GMT</pubDate></item></channel></rss>