<?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[Rückgabe per Referenz]]></title><description><![CDATA[<p>Hallo, wo genau liegt der unterschied zwischen einer normalen Rückgabe und einer als Referenz? Wo sind die Gefahren? Bei diesem Beispiel klappt beides :</p>
<pre><code>#ifndef FOO_H
#define FOO_H
#include &lt;iostream&gt;

class Foo {
public:
	Foo (int pA, int pB)
		: a(pA), b(pB) { }

	void anzeigen () {
		std::cout &lt;&lt; &quot;a: &quot; &lt;&lt; this-&gt;a &lt;&lt; std::endl;
		std::cout &lt;&lt; &quot;b: &quot; &lt;&lt; this-&gt;b &lt;&lt; std::endl;		
	}

	Foo&amp; zuweisen(Foo f) {  // Funktioniert mit Referenz und ohne als Rückgabe
		this-&gt;a = f.a;
		this-&gt;b = f.b;
		return *this;
	}

private:
	int a;
	int b;
};

#endif
[code=&quot;cpp&quot;]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/327161/rückgabe-per-referenz</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 20:22:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327161.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Jul 2014 09:41:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rückgabe per Referenz on Sat, 26 Jul 2014 09:41:53 GMT]]></title><description><![CDATA[<p>Hallo, wo genau liegt der unterschied zwischen einer normalen Rückgabe und einer als Referenz? Wo sind die Gefahren? Bei diesem Beispiel klappt beides :</p>
<pre><code>#ifndef FOO_H
#define FOO_H
#include &lt;iostream&gt;

class Foo {
public:
	Foo (int pA, int pB)
		: a(pA), b(pB) { }

	void anzeigen () {
		std::cout &lt;&lt; &quot;a: &quot; &lt;&lt; this-&gt;a &lt;&lt; std::endl;
		std::cout &lt;&lt; &quot;b: &quot; &lt;&lt; this-&gt;b &lt;&lt; std::endl;		
	}

	Foo&amp; zuweisen(Foo f) {  // Funktioniert mit Referenz und ohne als Rückgabe
		this-&gt;a = f.a;
		this-&gt;b = f.b;
		return *this;
	}

private:
	int a;
	int b;
};

#endif
[code=&quot;cpp&quot;]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2410554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410554</guid><dc:creator><![CDATA[Referenzen]]></dc:creator><pubDate>Sat, 26 Jul 2014 09:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe per Referenz on Sat, 26 Jul 2014 09:49:43 GMT]]></title><description><![CDATA[<p>Referenzen schrieb:</p>
<blockquote>
<p>Hallo, wo genau liegt der unterschied zwischen einer normalen Rückgabe und einer als Referenz?</p>
</blockquote>
<p>Beim einen wird kopiert, beim anderen eine Referenz zurück gegeben. Weißt du, was Referenzen sind? Falls ja, beantwortet sich die Frage doch von alleine. Falls nein, dann solltest du das vielleicht erst einmal lernen, denn dadurch würde sich, wie gesagt, die Frage von selbst beantworten.</p>
<blockquote>
<p>Wo sind die Gefahren?</p>
</blockquote>
<p>Klingt mir stark nach Hausaufgabe. Trotzdem der Hinweis: Eine Referenz muss sich auf irgendwas beziehen. Bezieht sie sich auf ein funktionslokales Objekt, dann würde dies nach Beenden der Funktion (aka nach der Rückgabe) bekannterweise nicht mehr existieren. Mit sehr unangenehmen Konsequenzen, wenn man sich dennoch darauf bezieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410556</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 26 Jul 2014 09:49:43 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe per Referenz on Sat, 26 Jul 2014 10:00:58 GMT]]></title><description><![CDATA[<p>Ich kann nicht leugnen dass ich zu diesem Thema etwas machen muss aber mich interessiert es wirklich und mir macht es Spaß <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>Entschuldigung wenn ich nerve, aber ich habe das leider immer noch nicht so ganz verstanden. Eine Referenz (so habe ich es gelernt) ist ja ein Alias-Name für etwas also z.B sowas :</p>
<pre><code>int a = 10;
	int&amp; b = a;
	b = 20;			// =&gt; a = 20
</code></pre>
<p>Referenzen als Parameter habe ich auch schon verstanden (mit Auswirkung auf was Original und keine Kopie). Aber leider hakt es bei der Rückgabe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> .</p>
<p>*this ist ja das Objekt, für das die Methode aufgerufen wurde, also wird ein Alias-Name auf das aktuelle Objekt zurück gegeben? Ich verstehe meinen eigenen Satz nicht <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=":-/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410559</guid><dc:creator><![CDATA[Referenzen]]></dc:creator><pubDate>Sat, 26 Jul 2014 10:00:58 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe per Referenz on Sat, 26 Jul 2014 10:33:34 GMT]]></title><description><![CDATA[<p>Eine Referenz ist schon mehr als nur ein Name. Da du hier mit <code>this</code> hantierst, gehe ich mal davon aus, dass du weißt, was Zeiger (und die zugehörige Semantik) sind.<br />
Dann sind Referenzen im Prinzip nichts anderes als konstante (!) Zeiger auf eine Variable (die selber nicht konstant zu sein braucht):</p>
<pre><code class="language-cpp">int number = 10;
int* const pseudo_reference = &amp;number; // Bedenke: int* const != const int* == int const*
*pseudo_reference = 5; // (number == 5) == true
int other_number;
pseudo_reference = &amp;other_number; // nicht möglich, da Zeiger konstant
// das eine ist ein konstanter Zeiger (der nicht mehr geändert werden kann), das andere sind änderbare Zeiger auf konstante Objekte
</code></pre>
<p>Referenzen haben die selbe Semantik, nur eine schönere Syntax, da keine * und &amp; benötigt werden. Du kannst ihnen nur bei ihrer Definition zuweisen, worauf sie verweisen. Wenn das Objekt, auf das sie zeigen zerstört wird, wird die Referenz/der Zeiger unweigerlich ungültig (auch wenn er/sie selbst noch existiert), aber nutzlos, da du ihn nicht ändern kannst. Deshalb sollte man solche Situationen vermeiden.</p>
<p>So, in diesem Lichte kannst du jetzt noch mal versuchen, dir die Rückgabe einer Referenz zu erklären und warum das u.U. zu undefiniertem Verhalten führen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410563</guid><dc:creator><![CDATA[Jodocus]]></dc:creator><pubDate>Sat, 26 Jul 2014 10:33:34 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe per Referenz on Sat, 26 Jul 2014 15:00:37 GMT]]></title><description><![CDATA[<p>Dann klappt</p>
<pre><code>return *this;
</code></pre>
<p>also immer?</p>
<p>(Bevor ich darüber aufgeklärt werde: Nein, ich meinte nicht bei was krankhaftem wie</p>
<pre><code>delete this;
return *this;//klappt bei mir
</code></pre>
<p>oder</p>
<pre><code>reinterpret_cast&lt;Foo*&gt;(main)-&gt;zuweisen(reinterpret_cast&lt;Foo*&gt;(main));//klappt bei mir
</code></pre>
<p>)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410584</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 26 Jul 2014 15:00:37 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabe per Referenz on Sat, 26 Jul 2014 16:41:21 GMT]]></title><description><![CDATA[<p>Ich kann mir noch mehr krankhafte Fälle ausdenken, wenn du darauf hinaus willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2410594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2410594</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 26 Jul 2014 16:41:21 GMT</pubDate></item></channel></rss>