<?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 bei operatorüberladung]]></title><description><![CDATA[<p>hi leutz,<br />
also hab vollgendes problem: ich habe eine klasse, die beim initialisieren mit new einen bereich anlegt. und im destruktor wird der scheis wieder gelöscht. und jetzt habe ich operatoren überladen, und zwar wie folgt:</p>
<pre><code class="language-cpp">friend myclass operator+(const myclass&amp; v1, const myclass&amp; v2);
</code></pre>
<p>ich addiere v1 und v2 und setze den wert in erg (beispielsweise).</p>
<pre><code class="language-cpp">myclass erg, v1, v2;
erg = v1 + v2;
</code></pre>
<p>das funktioniert auch, aber ich habe nun das problem, dass ich im operator+ nochmal eine dritte classe anlegen muss, damit die anderen 2 erhalten bleiben. eigentlich wird diese durch den destruktor gelöscht, was ich aber mit dem kopierkonstruktor verhindere. und wie lösche ich denn die jetzt neu angelgte klasse? muss ich im operator = diese löschen oder wie?</p>
<p>vielen dank schon mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/177157/problem-bei-operatorüberladung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 25 Jun 2026 06:28:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177157.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Mar 2007 16:16:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to problem bei operatorüberladung on Wed, 28 Mar 2007 16:21:56 GMT]]></title><description><![CDATA[<p>hi leutz,<br />
also hab vollgendes problem: ich habe eine klasse, die beim initialisieren mit new einen bereich anlegt. und im destruktor wird der scheis wieder gelöscht. und jetzt habe ich operatoren überladen, und zwar wie folgt:</p>
<pre><code class="language-cpp">friend myclass operator+(const myclass&amp; v1, const myclass&amp; v2);
</code></pre>
<p>ich addiere v1 und v2 und setze den wert in erg (beispielsweise).</p>
<pre><code class="language-cpp">myclass erg, v1, v2;
erg = v1 + v2;
</code></pre>
<p>das funktioniert auch, aber ich habe nun das problem, dass ich im operator+ nochmal eine dritte classe anlegen muss, damit die anderen 2 erhalten bleiben. eigentlich wird diese durch den destruktor gelöscht, was ich aber mit dem kopierkonstruktor verhindere. und wie lösche ich denn die jetzt neu angelgte klasse? muss ich im operator = diese löschen oder wie?</p>
<p>vielen dank schon mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254801</guid><dc:creator><![CDATA[itwasntpete]]></dc:creator><pubDate>Wed, 28 Mar 2007 16:21:56 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei operatorüberladung on Wed, 28 Mar 2007 16:30:04 GMT]]></title><description><![CDATA[<p>Das mit der dritten Klasse hört sich nicht so prickelnd an. Der binary op+ ist normalerweise sowieso nur ein schlichtes <code>return foo(lhs) += rhs;</code></p>
<p>Für den &quot;Bereich&quot; suchst du wahrscheinlich <code>boost::shared_*</code> ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1254824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1254824</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Wed, 28 Mar 2007 16:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei operatorüberladung on Sat, 31 Mar 2007 01:14:42 GMT]]></title><description><![CDATA[<p>also ich habe mich in die boost::shared_ eingelesen und es hilft nicht weiter, denn ich programmiere die klasse und nicht das programm. und das boost::shared_* müsste (wenn ich es richtig verstanden habe) im programm eingesetzt werden.<br />
ich weis, dass sich das mit der dritten temporären klasse nicht prickelnd anhört, aber wie soll ich es denn sonnst machen? weil ich ja einen wert zurückgeben muss ohne die operanden zu beeinflussen. sprich:</p>
<pre><code class="language-cpp">erg = v1 + v2;
</code></pre>
<p>v1 und v2 sollten so erhalten bleiben.<br />
und glaube, dass ich die &quot;lösung&quot; habe, aber wenn mir jemand ne belehrung gibt, immer gern <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="😉"
    /><br />
und zwar ist es glaube ich kein problem. wenn mich nicht alles täuscht, wird die temporäre klasse eh beim blockende gelöscht. oder irre ich mich da? also so:</p>
<pre><code class="language-cpp">myclass erg, v1, v2;
{
  erg = v1 + v2;     // temporäre wird angelgt
}                           // blockende temporäre (v1 + v2) wird gelöscht
</code></pre>
<p>also wenn das nicht stimmt, und es jemand weis wie ich ich es machen muss, bitte posten. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /><br />
thx<br />
pi88el</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1256385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1256385</guid><dc:creator><![CDATA[itwasntpete]]></dc:creator><pubDate>Sat, 31 Mar 2007 01:14:42 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei operatorüberladung on Sat, 31 Mar 2007 07:59:51 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Das mit der dritten Klasse hört sich nicht so prickelnd an. Der binary op+ ist normalerweise sowieso nur ein schlichtes <code>return foo(lhs) += rhs;</code></p>
</blockquote>
<p>Huch? Nein, 'op+' erstellt immer eine Kopie, sonst würde die Operation <code>a = b + c</code> ja 'b' modifizieren -- das darf nicht sein.</p>
<p>Aus diesem Grund ist ja 'op+=' in der Regel auch effizienter.</p>
<p>/EDIT: Ups, ich glaube, ich habe den OP falsch verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1256412</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1256412</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 31 Mar 2007 07:59:51 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei operatorüberladung on Sat, 31 Mar 2007 10:14:01 GMT]]></title><description><![CDATA[<p>Also die Form von op+ sollte so aussehen:</p>
<pre><code class="language-cpp">const T operator+(const T&amp; a, const T&amp; b)
</code></pre>
<p>Und ihn zu einem friend machen ist überflüssig. Im Funktionsrumpf so wie es finix gezeigt hat. Das temporäre Objekt wird dann natürlich nach der geschweiften Klammer gelöscht, wenn du Glück hast und RVO eintritt, hast du fast keine Kosten verursacht ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1256493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1256493</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 31 Mar 2007 10:14:01 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei operatorüberladung on Sat, 31 Mar 2007 11:15:47 GMT]]></title><description><![CDATA[<p>Wenn nicht friend wird er wohl klassenmember oder nicht? In dem Fall kriegt er doch nur ein Argument, oder irr ich mich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1256531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1256531</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Sat, 31 Mar 2007 11:15:47 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei operatorüberladung on Sat, 31 Mar 2007 11:24:10 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Wenn nicht friend wird er wohl klassenmember oder nicht? In dem Fall kriegt er doch nur ein Argument, oder irr ich mich?</p>
</blockquote>
<p>Nein, man muss es nicht als Klassenmember implementieren. Die Implementierung von 'op+' sollte sowieso fast *immer* diese Form aufweisen:</p>
<pre><code class="language-cpp">T operator +(T const&amp; a, T const&amp; b)
{
    T ret = a;
    ret += b;
    return ret;
}
</code></pre>
<p>Und solch einen Code braucht keinerlei 'friend'-Zugriff.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1256535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1256535</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sat, 31 Mar 2007 11:24:10 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei operatorüberladung on Sat, 31 Mar 2007 11:30:44 GMT]]></title><description><![CDATA[<p>achso, entschuldigung. Wenn man den += vorher implementiert passts natürlich. Dummheit meinerseits, sorry.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1256537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1256537</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Sat, 31 Mar 2007 11:30:44 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei operatorüberladung on Sun, 01 Apr 2007 04:39:11 GMT]]></title><description><![CDATA[<p>aber wenn ich auf die internen private variablen von a und b zugreifen will, muss die methode friend sein oder nicht. dabei istes egal, ob ich += oder + benutze, beide greifen auf die privaten zu...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1256932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1256932</guid><dc:creator><![CDATA[itwasntpete]]></dc:creator><pubDate>Sun, 01 Apr 2007 04:39:11 GMT</pubDate></item><item><title><![CDATA[Reply to problem bei operatorüberladung on Sun, 01 Apr 2007 09:40:44 GMT]]></title><description><![CDATA[<p>pi88el schrieb:</p>
<blockquote>
<p>aber wenn ich auf die internen private variablen von a und b zugreifen will, muss die methode friend sein oder nicht.</p>
</blockquote>
<p>Ja, aber wieso solltest Du bei der implementierung von 'op+' auf private Variablen zugreifen sollen?</p>
<p>Sowas ist, soweit ich das sehe, nur dann nötig, wenn man dem Operator eine recht perverse Semantik verpasst. Die &quot;Standardsemantik&quot; ist genau wie von mir geschrieben und daran sollte man sich eigentlich auch immer halten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1257010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1257010</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 01 Apr 2007 09:40:44 GMT</pubDate></item></channel></rss>