<?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[Generelle Verständnisfrage zum this-Zeiger]]></title><description><![CDATA[<p>Ich verstehe this-Zeiger als return-Wert einer Methode nicht. Warum sollte man die Adresse des eigenen Objekts als return Wert zurück geben? Was nimmt der this-Zeiger sonst für Informationen auf? Einen Ausdruck als return-Wert verstehe ich, aber mit Referenzen/Zeigern ist das sone Sache. Kann mir einer helfen?</p>
<p><strong>edit:</strong><br />
Falls Beispiel benötigt, werde ich eines Suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246339/generelle-verständnisfrage-zum-this-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 03:31:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246339.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 26 Jul 2009 20:43:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Generelle Verständnisfrage zum this-Zeiger on Sun, 26 Jul 2009 20:45:03 GMT]]></title><description><![CDATA[<p>Ich verstehe this-Zeiger als return-Wert einer Methode nicht. Warum sollte man die Adresse des eigenen Objekts als return Wert zurück geben? Was nimmt der this-Zeiger sonst für Informationen auf? Einen Ausdruck als return-Wert verstehe ich, aber mit Referenzen/Zeigern ist das sone Sache. Kann mir einer helfen?</p>
<p><strong>edit:</strong><br />
Falls Beispiel benötigt, werde ich eines Suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749991</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Sun, 26 Jul 2009 20:45:03 GMT</pubDate></item><item><title><![CDATA[Reply to Generelle Verständnisfrage zum this-Zeiger on Sun, 26 Jul 2009 20:51:37 GMT]]></title><description><![CDATA[<p>Man kann damit furchbar viele Sachen in eine Zeile schreiben.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

struct Foo{
	Foo* f1(){
		cout&lt;&lt;&quot;f1\n&quot;;
  return this;
  }
	Foo* f2(){
		cout&lt;&lt;&quot;f2\n&quot;;
  return this;
  }
};
int main(){
	delete (new Foo)-&gt;f1()-&gt;f2()-&gt;f1();//helau!
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1749997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749997</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 26 Jul 2009 20:51:37 GMT</pubDate></item><item><title><![CDATA[Reply to Generelle Verständnisfrage zum this-Zeiger on Sun, 26 Jul 2009 20:49:31 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Foo* Foo::f1(){
  tuwas1();
  return this;
}
Foo* Foo::f2(){
  tuwas2();
  return this;
}
...
Foo *f=new Foo;
f-&gt;f1()-&gt;f2();//helau!
</code></pre>
</blockquote>
<p>Danke. In meinem Buch wird der this-Zeiger allerdings auch dereferenziert (*this). Welche Bedeutung hat das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749999</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Sun, 26 Jul 2009 20:49:31 GMT</pubDate></item><item><title><![CDATA[Reply to Generelle Verständnisfrage zum this-Zeiger on Sun, 26 Jul 2009 20:53:46 GMT]]></title><description><![CDATA[<p>*this, um eine Referenz zurückzugeben.</p>
<pre><code class="language-cpp">...
return *this
...
f.f1().f2()
</code></pre>
<p>Vor allem gut ist das zum Beispiel für</p>
<pre><code class="language-cpp">cout&lt;&lt;&quot;hallo&quot;&lt;&lt;&quot;welt&quot;&lt;&lt;'\n';
</code></pre>
<p>Das ist ja</p>
<pre><code class="language-cpp">cout.operator&lt;&lt;(&quot;hallo&quot;).operator&lt;&lt;(&quot;welt&quot;).operator&lt;&lt;('\n');
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1750000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750000</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 26 Jul 2009 20:53:46 GMT</pubDate></item><item><title><![CDATA[Reply to Generelle Verständnisfrage zum this-Zeiger on Sun, 26 Jul 2009 22:59:08 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Vor allem gut ist das zum Beispiel für [...]</p>
</blockquote>
<p>Oder auch oft für den Zuweisungsoperator (oder arithmetische Zuweisungsoperatoren wie <code>+=</code> ), die eine Referenz auf das Objekt zurückgeben.</p>
<p>Manche Leute benutzen <code>this-&gt;</code> auch, um Membervariablen zu kennzeichnen oder von gleichnamigen Parametern abzugrenzen, ich persönlich finde das allerdings nicht so schön und nehme stattdessen meistens ein Präfix <code>m_</code> oder <code>My</code> .</p>
<p>Grundsätzlich braucht man <code>this</code> halt, wenn man innerhalb der Memberfunktionen einer Klasse auf das Objekt an sich bzw. dessen Adresse zugreifen möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750035</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 26 Jul 2009 22:59:08 GMT</pubDate></item><item><title><![CDATA[Reply to Generelle Verständnisfrage zum this-Zeiger on Mon, 27 Jul 2009 02:44:22 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Vor allem gut ist das zum Beispiel für [...]</p>
</blockquote>
<p>Oder auch oft für den Zuweisungsoperator (oder arithmetische Zuweisungsoperatoren wie <code>+=</code> ), die eine Referenz auf das Objekt zurückgeben.</p>
<p>Manche Leute benutzen <code>this-&gt;</code> auch, um Membervariablen zu kennzeichnen oder von gleichnamigen Parametern abzugrenzen, ich persönlich finde das allerdings nicht so schön und nehme stattdessen meistens ein Präfix <code>m_</code> oder <code>My</code> .</p>
<p>Grundsätzlich braucht man <code>this</code> halt, wenn man innerhalb der Memberfunktionen einer Klasse auf das Objekt an sich bzw. dessen Adresse zugreifen möchte.</p>
</blockquote>
<p>Ok, das verstehe ich jetzt, aber noch was anderes:</p>
<p>Angenommen ich habe diesen CODE-Abschnitt hier:</p>
<pre><code class="language-cpp">class Foo
{
private:
        long zaehler, nenner;

Foo&amp; operator+=(const Foo&amp; a)
{
     zaehler = a.zaehler * nenner + zaehler * a.nenner;
     nenner *= a.nenner;
     return *this;
}
};

int main()
{
   Foo obj1, obj2;
   obj1 += obj2;
}
</code></pre>
<p>Dann ist der operator += für das Objekt <code>obj1</code> überladen? Und wenn ja, wie kann das sein? Ich mein' die Methode gibt doch nur die Referenz zum Objekt zurück (und Referenz zum Objekt zurückgeben stelle ich mir so vor, dass die Adresse des Objektes zurückgegeben wird) aber doch nicht den Operator??<br />
<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>
<p>Öhm, ich habe ne Theorie: Das aktuelle Objekt <code>obj1</code> wird verändert, also wirkt sich die Änderung einfach direkt auf den <strong>linken</strong> Operanden aus... Oder?</p>
<pre><code class="language-cpp">obj1 += obj2;
</code></pre>
<p>*<em>Woher weiß aber <em>this denn, dass vorher in der Operatorfunktion etwas definiert wurde?</em></em> Ich kenne das ja so, dass eine Routine Daten verarbeitet und <strong>dieselben</strong> anschließend per return zurückgibt. Aber hier werden Daten verarbeitet und anschließend wir eine Referenz auf das aktuelle Objekt zurückgegeben. *<em>Eine Verbindung zwischen <em>this und den vorherigen Anweisungen mit zaehler, a und nenner fehlt mir.</em></em> Natürlich kann es auch sein, dass zaehler und nenner einfach nur geändert werden sollen, sobald</p>
<pre><code class="language-cpp">obj1 += obj2;
</code></pre>
<p>aufgerufen wird und damit basta. Wozu dann aber noch die Anweisung <code>return *this;</code> ? Der einzige Fall, den ich verstehen würde, ist der, dass das aktuelle Objekt verändert wird. Denn dann hat es sinn, es dann auch zurückzugeben. In dem Fall müsste die Operatorfunktion IMPLIZIT this-Zeiger auf zaehler und nenner setzen, stimmt's?<br />
Bin ich zu doof dafür?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750046</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Mon, 27 Jul 2009 02:44:22 GMT</pubDate></item><item><title><![CDATA[Reply to Generelle Verständnisfrage zum this-Zeiger on Mon, 27 Jul 2009 06:42:53 GMT]]></title><description><![CDATA[<p>In deinem Beispiel macht es nicht viel Sinn, allerdings will man ev. das hier machen:</p>
<pre><code class="language-cpp">int main()
{
   Foo obj1, obj2,obj3;

  (obj1 += obj2) += obj3;
}
</code></pre>
<p>Nicht sonderlich schön usw., allerdings durchaus möglich.</p>
<blockquote>
<p>Dann ist der operator += für das Objekt obj1 überladen?</p>
</blockquote>
<p>Nicht überladen. Sondern überhaupt deklariert und definiert.</p>
<p>Du solltest dir Operatoren als ganz normale Funktionen mit halt ein wenig Syntax Sugar vorstellen.</p>
<pre><code class="language-cpp">obj1 += obj2;
</code></pre>
<p>bedeutet nichts anderes, als:</p>
<pre><code class="language-cpp">obj1.operator += ( obj2 );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1750085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750085</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 27 Jul 2009 06:42:53 GMT</pubDate></item><item><title><![CDATA[Reply to Generelle Verständnisfrage zum this-Zeiger on Mon, 27 Jul 2009 07:24:06 GMT]]></title><description><![CDATA[<p>skullyan schrieb:</p>
<blockquote>
<p>Dann ist der operator += für das Objekt <code>obj1</code> überladen?</p>
</blockquote>
<p>Nein, er ist für die Klasse Foo überladen. Für einzelne Objekte kannm an nichts überladen. In dem Aufruf den du oben gezeigt hast wird die Rückgabe des op+= nicht benutzt.</p>
<blockquote>
<p>Öhm, ich habe ne Theorie: Das aktuelle Objekt <code>obj1</code> wird verändert, also wirkt sich die Änderung einfach direkt auf den <strong>linken</strong> Operanden aus... Oder?</p>
</blockquote>
<p>so stehts zumindest in der Definition der Operatorüberladung, ja.</p>
<blockquote>
<p>*<em>Woher weiß aber <em>this denn, dass vorher in der Operatorfunktion etwas definiert wurde?</em></em></p>
</blockquote>
<p>Garnicht. braucht es auch nicht zu wissen. Der operator += ist eine Methode wie jede normale Methode auch. sie mach was mit einem Objekt und gibt danach als Rückgabewert eine Referenz auf das grade geänderte Objekt zurück.</p>
<blockquote>
<p>Ich kenne das ja so, dass eine Routine Daten verarbeitet und <strong>dieselben</strong> anschließend per return zurückgibt.</p>
</blockquote>
<p>Nicht wirklich. Eine Routine kann alles mögliche zurückgeben. Zum Beispiel einen neuen Wert (z.B. das Ergebnis einer Addition), eine Kopie eines vorhandenen Wertes (z.B. bei Gettern), eine Referenz auf irgendeinen anderen Wert, oder eben wie bei <code>return *this;</code> eine Referenz auf eines der geänderten Objekte.</p>
<blockquote>
<p>Aber hier werden Daten verarbeitet und anschließend wir eine Referenz auf das aktuelle Objekt zurückgegeben. *<em>Eine Verbindung zwischen <em>this und den vorherigen Anweisungen mit zaehler, a und nenner fehlt mir.</em></em></p>
</blockquote>
<p>*this ist das Objekt auf das sich die Änderungen bezogen haben. Die Member von *this sind gerade geändert worden. *this ist immer das Objekt, das in der MEthode verarbeitet wird, bzw. für das die Methode aufgerufen wird. Bei <code>obj1 += obj2</code> ist <code>*this == obj1</code></p>
<blockquote>
<p>Natürlich kann es auch sein, dass zaehler und nenner einfach nur geändert werden sollen, sobald</p>
<pre><code class="language-cpp">obj1 += obj2;
</code></pre>
<p>aufgerufen wird und damit basta. Wozu dann aber noch die Anweisung <code>return *this;</code> ? Der einzige Fall, den ich verstehen würde, ist der, dass das aktuelle Objekt verändert wird. Denn dann hat es sinn, es dann auch zurückzugeben. In dem Fall müsste die Operatorfunktion IMPLIZIT this-Zeiger auf zaehler und nenner setzen, stimmt's?</p>
</blockquote>
<p>Genau das ist der Sinn des this-Zeigers. Sollte eigentlich im Beginners' Tutorial deiner Wahl stehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750096</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 27 Jul 2009 07:24:06 GMT</pubDate></item><item><title><![CDATA[Reply to Generelle Verständnisfrage zum this-Zeiger on Mon, 27 Jul 2009 14:25:32 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>skullyan schrieb:</p>
<blockquote>
<p>Dann ist der operator += für das Objekt <code>obj1</code> überladen?</p>
</blockquote>
<p>Nein, er ist für die Klasse Foo überladen. Für einzelne Objekte kannm an nichts überladen. In dem Aufruf den du oben gezeigt hast wird die Rückgabe des op+= nicht benutzt.</p>
<blockquote>
<p>Öhm, ich habe ne Theorie: Das aktuelle Objekt <code>obj1</code> wird verändert, also wirkt sich die Änderung einfach direkt auf den <strong>linken</strong> Operanden aus... Oder?</p>
</blockquote>
<p>so stehts zumindest in der Definition der Operatorüberladung, ja.</p>
<blockquote>
<p>*<em>Woher weiß aber <em>this denn, dass vorher in der Operatorfunktion etwas definiert wurde?</em></em></p>
</blockquote>
<p>Garnicht. braucht es auch nicht zu wissen. Der operator += ist eine Methode wie jede normale Methode auch. sie mach was mit einem Objekt und gibt danach als Rückgabewert eine Referenz auf das grade geänderte Objekt zurück.</p>
<blockquote>
<p>Ich kenne das ja so, dass eine Routine Daten verarbeitet und <strong>dieselben</strong> anschließend per return zurückgibt.</p>
</blockquote>
<p>Nicht wirklich. Eine Routine kann alles mögliche zurückgeben. Zum Beispiel einen neuen Wert (z.B. das Ergebnis einer Addition), eine Kopie eines vorhandenen Wertes (z.B. bei Gettern), eine Referenz auf irgendeinen anderen Wert, oder eben wie bei <code>return *this;</code> eine Referenz auf eines der geänderten Objekte.</p>
<blockquote>
<p>Aber hier werden Daten verarbeitet und anschließend wir eine Referenz auf das aktuelle Objekt zurückgegeben. *<em>Eine Verbindung zwischen <em>this und den vorherigen Anweisungen mit zaehler, a und nenner fehlt mir.</em></em></p>
</blockquote>
<p>*this ist das Objekt auf das sich die Änderungen bezogen haben. Die Member von *this sind gerade geändert worden. *this ist immer das Objekt, das in der MEthode verarbeitet wird, bzw. für das die Methode aufgerufen wird. Bei <code>obj1 += obj2</code> ist <code>*this == obj1</code></p>
<blockquote>
<p>Natürlich kann es auch sein, dass zaehler und nenner einfach nur geändert werden sollen, sobald</p>
<pre><code class="language-cpp">obj1 += obj2;
</code></pre>
<p>aufgerufen wird und damit basta. Wozu dann aber noch die Anweisung <code>return *this;</code> ? Der einzige Fall, den ich verstehen würde, ist der, dass das aktuelle Objekt verändert wird. Denn dann hat es sinn, es dann auch zurückzugeben. In dem Fall müsste die Operatorfunktion IMPLIZIT this-Zeiger auf zaehler und nenner setzen, stimmt's?</p>
</blockquote>
<p>Genau das ist der Sinn des this-Zeigers. Sollte eigentlich im Beginners' Tutorial deiner Wahl stehen.</p>
</blockquote>
<p>Ok, habs kapiert, danke!<br />
<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/1750333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750333</guid><dc:creator><![CDATA[skullyan]]></dc:creator><pubDate>Mon, 27 Jul 2009 14:25:32 GMT</pubDate></item></channel></rss>