<?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 überladen]]></title><description><![CDATA[<p>Moin,</p>
<p>Ich hab ein Problem mit einem Beispiel in meinem Buch!</p>
<p>In dem Kapitel geht es darum wie man Operatoren Überlädt, und die Ausgabe von dem Autor stimmt nicht mit der, von mir überein und ich finde den fehler, nicht, allerdings finde ich die Ausgabe des Autors auch ein wenig seltsam!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Counter
{

public:
       Counter();
       Counter(int initValue);
       ~Counter() {}
       int GetItsVal() const
       {
           return itsVal;
       }

       void SetItsVal(int x)
       {
            itsVal=x;
       }

       const Counter&amp; operator++ ();
       const Counter operator++ (int);

private: int itsVal;
};

Counter::Counter():
                   itsVal(0)
                   {}

const Counter&amp; Counter::operator++()
{
      ++itsVal;
      return *this;
      }

const Counter Counter::operator++(int)
{
      Counter temp(*this);
      ++itsVal;
      return temp;
      }

       int main()
       {

       Counter i;
       cout &lt;&lt; &quot;Wert von i: &quot; &lt;&lt; i.GetItsVal()&lt;&lt; endl;
       i++;
       cout &lt;&lt; &quot;Wert von i: &quot; &lt;&lt; i.GetItsVal()&lt;&lt; endl;
       ++i;
       cout &lt;&lt; &quot;Wert von i: &quot; &lt;&lt; i.GetItsVal()&lt;&lt; endl;
       Counter a = ++i;
       cout &lt;&lt; &quot;Wert von a: &quot; &lt;&lt; a.GetItsVal();
       cout &lt;&lt; &quot; und von i: &quot; &lt;&lt; i.GetItsVal()&lt;&lt; endl;
       a = i++;
       cout &lt;&lt; &quot;Wert von a: &quot; &lt;&lt; a.GetItsVal();
       cout &lt;&lt; &quot; und von i: &quot; &lt;&lt; i.GetItsVal()&lt;&lt; endl;

           system(&quot;PAUSE&quot;);
           return 0;
       }
</code></pre>
<p>Das kommt bei mir raus:</p>
<p>Wert von i: 0<br />
Wert von i: 1<br />
Wert von i: 2<br />
Wert von a: 3 und von i: 3<br />
Wert von a: 3 und von i: 4</p>
<p>Beim Autor kommt das:</p>
<p>Wert von i: 0<br />
Wert von i: 1<br />
Wert von i: 2<br />
Wert von a: 3 und von i: 3<br />
Wert von a: 4 und von i: 4</p>
<p>Habe ich etwas übersehen/falsch gemacht?</p>
<p>Desweiteren ist in dem Zusammenhang leider nichts zum *this Zeiger gesagt worden, der wurde im Buch überhaupt nur einmal kurz erwähnt, und ich kann nicht ganz verstehen was genau dort passiert.</p>
<p>Falls jemand Zeit hat würde ich mich freuen, wen mir jemand die beiden code teile in der der Operator geschrieben wird detailiert erklären könnte.</p>
<p>Ansonsten würde ich mich auch über ein tutorial zu dem Thema freuen!</p>
<p>Gruß und vielen dank im voraus!</p>
<p>Muffin</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/153905/operator-überladen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 20:25:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/153905.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Jul 2006 17:00:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operator überladen on Fri, 21 Jul 2006 17:00:02 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>Ich hab ein Problem mit einem Beispiel in meinem Buch!</p>
<p>In dem Kapitel geht es darum wie man Operatoren Überlädt, und die Ausgabe von dem Autor stimmt nicht mit der, von mir überein und ich finde den fehler, nicht, allerdings finde ich die Ausgabe des Autors auch ein wenig seltsam!</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Counter
{

public:
       Counter();
       Counter(int initValue);
       ~Counter() {}
       int GetItsVal() const
       {
           return itsVal;
       }

       void SetItsVal(int x)
       {
            itsVal=x;
       }

       const Counter&amp; operator++ ();
       const Counter operator++ (int);

private: int itsVal;
};

Counter::Counter():
                   itsVal(0)
                   {}

const Counter&amp; Counter::operator++()
{
      ++itsVal;
      return *this;
      }

const Counter Counter::operator++(int)
{
      Counter temp(*this);
      ++itsVal;
      return temp;
      }

       int main()
       {

       Counter i;
       cout &lt;&lt; &quot;Wert von i: &quot; &lt;&lt; i.GetItsVal()&lt;&lt; endl;
       i++;
       cout &lt;&lt; &quot;Wert von i: &quot; &lt;&lt; i.GetItsVal()&lt;&lt; endl;
       ++i;
       cout &lt;&lt; &quot;Wert von i: &quot; &lt;&lt; i.GetItsVal()&lt;&lt; endl;
       Counter a = ++i;
       cout &lt;&lt; &quot;Wert von a: &quot; &lt;&lt; a.GetItsVal();
       cout &lt;&lt; &quot; und von i: &quot; &lt;&lt; i.GetItsVal()&lt;&lt; endl;
       a = i++;
       cout &lt;&lt; &quot;Wert von a: &quot; &lt;&lt; a.GetItsVal();
       cout &lt;&lt; &quot; und von i: &quot; &lt;&lt; i.GetItsVal()&lt;&lt; endl;

           system(&quot;PAUSE&quot;);
           return 0;
       }
</code></pre>
<p>Das kommt bei mir raus:</p>
<p>Wert von i: 0<br />
Wert von i: 1<br />
Wert von i: 2<br />
Wert von a: 3 und von i: 3<br />
Wert von a: 3 und von i: 4</p>
<p>Beim Autor kommt das:</p>
<p>Wert von i: 0<br />
Wert von i: 1<br />
Wert von i: 2<br />
Wert von a: 3 und von i: 3<br />
Wert von a: 4 und von i: 4</p>
<p>Habe ich etwas übersehen/falsch gemacht?</p>
<p>Desweiteren ist in dem Zusammenhang leider nichts zum *this Zeiger gesagt worden, der wurde im Buch überhaupt nur einmal kurz erwähnt, und ich kann nicht ganz verstehen was genau dort passiert.</p>
<p>Falls jemand Zeit hat würde ich mich freuen, wen mir jemand die beiden code teile in der der Operator geschrieben wird detailiert erklären könnte.</p>
<p>Ansonsten würde ich mich auch über ein tutorial zu dem Thema freuen!</p>
<p>Gruß und vielen dank im voraus!</p>
<p>Muffin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101954</guid><dc:creator><![CDATA[Muffin888]]></dc:creator><pubDate>Fri, 21 Jul 2006 17:00:02 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Fri, 21 Jul 2006 17:18:23 GMT]]></title><description><![CDATA[<p>Dein Ergebnis ist richtig, das aus dem Buch nicht.</p>
<p>Der this-Pointer zeigt auf das Objekt, dessen Methode gerade abgearbeitet wird. Im Fall das operator++(int) erstellst du also eine Kopie von diesem Objekt, veränderst das Objekt und gibst die unveränderte Kopie zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1101962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101962</guid><dc:creator><![CDATA[Z2]]></dc:creator><pubDate>Fri, 21 Jul 2006 17:18:23 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Fri, 21 Jul 2006 17:31:57 GMT]]></title><description><![CDATA[<p>Ah, jetzt hab ichs verstanden, vielen dank <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/1101967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1101967</guid><dc:creator><![CDATA[Muffin888]]></dc:creator><pubDate>Fri, 21 Jul 2006 17:31:57 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Sun, 23 Jul 2006 16:14:36 GMT]]></title><description><![CDATA[<p>Ich habe nochmal eine Frage zum Überladen von Operatoren!</p>
<p>Wen ich einen Operator habe wie +, nimmt er dann immer automatisch das linke objekt mit in die funktion? (ich weiß jetzt nicht so recht wie man das richtig umschreibt)</p>
<p>Beispiel:<br />
a + b</p>
<p>hierbei ist es doch so das this immer auf a zeigt oder?</p>
<p>In meinem Buch wird unter anderem der ++ Operator überladen.</p>
<pre><code class="language-cpp">const Counter Counter::operator ++ (int)
{
Counter temp(*this);
++itsVal;
return temp;
}

const Counter&amp; Counter::operator++()
{
++itsVal;
return *this;
}
</code></pre>
<p>Mein verständnis problem dabei ist, woher weiß der compiler wann etwas auf welcher seite steht.</p>
<p>Wen es so richtig is wie ich es oben beschrieben habe würde bei &quot;++a &quot;ja der funktion kein paremter übergeben werden, da ja nichts auf der linken seite des operators ist.</p>
<p>Und bei &quot;a++&quot; würde a übergeben werden und das würde dann die &quot;geflaggte&quot; version des operators aufrufen.<br />
Stimmt das so oder hab ich das falsch verstanden?</p>
<p>Dann noch eine frage zum &quot;=&quot; Operator</p>
<pre><code class="language-cpp">CAT &amp;CAT::operator=(const CAT &amp;rhs)
{
if(*this == rhs)
{ return *this; }
delete itsWeight;
delete itsAge;
itsWeight = new int;
itsAge= new int;
*itsAge = rhs.GetAge();
*itsWeight = rhs.GetWeight();
return *this;
}
</code></pre>
<p>Nun zu meiner frage:</p>
<p>Wen ich es richtig verstanden habe, wird mit delete itsWeight/itsAge der speicher freigegeben. Dann bekommen itsWeight/itsAge speicher auf dem heap reserviert, danach wird ihnen der wert von rhs.GetAge/GetWeight zugewiesen.</p>
<p>und dann.. return *this. Wozu genau ist das, ich würde meinen das die Werte ja bereits ausgetauscht sind, wohin wird *this zurück gegebn?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102650</guid><dc:creator><![CDATA[Muffin888]]></dc:creator><pubDate>Sun, 23 Jul 2006 16:14:36 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Sun, 23 Jul 2006 17:26:07 GMT]]></title><description><![CDATA[<blockquote>
<p>Wen ich es richtig verstanden habe, wird mit delete itsWeight/itsAge der speicher freigegeben. Dann bekommen itsWeight/itsAge speicher auf dem heap reserviert, danach wird ihnen der wert von rhs.GetAge/GetWeight zugewiesen.</p>
</blockquote>
<p>its... sind Zeiger, die auf den Speicherbereich zeigen. Man muss delete anwenden (Speicher freigeben), bevor man diesen Zeigern neue Werte zuordnet! Ansonsten gibt es unausweichlich ein &quot;memory leak&quot;.</p>
<blockquote>
<p>return *this. Wozu genau ist das, ich würde meinen das die Werte ja bereits ausgetauscht sind, wohin wird *this zurück gegebn?</p>
</blockquote>
<p>Schau Dir den Rückgabewert der Member-Funktion op= an. Das ist eine Referenz auf ein Objekt CAT. Es sollte der Inhalt von this, also das Objekt selbst zurückgegeben werden. Sonst geht so etwas nicht:</p>
<pre><code class="language-cpp">CAT a = b = c = d;
</code></pre>
<pre><code class="language-cpp">if(*this == rhs)
{ return *this; }
</code></pre>
<p>ist sehr wichtig, weil es vor Selbstzuweisung schützt. Ansonsten würde man its... ungültig machen, um es anschließend sich selbst wieder zuzuordnen. Das ist wie ein Gedächtnisverlust des Objektes? =&gt; Bumm! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102682</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Sun, 23 Jul 2006 17:26:07 GMT</pubDate></item><item><title><![CDATA[Reply to Operator überladen on Sun, 23 Jul 2006 17:36:59 GMT]]></title><description><![CDATA[<p>Hehe ok, das war ne schwere Geburt <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="🙂"
    /> Damit hab ich mich seit 2 tagen rum geschlagen, aber nun hab ichs glaub ich auch verstanden.</p>
<p>vielen dank für die Hilfe <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>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1102691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1102691</guid><dc:creator><![CDATA[Muffin888]]></dc:creator><pubDate>Sun, 23 Jul 2006 17:36:59 GMT</pubDate></item></channel></rss>