<?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[return Referenz und *this??]]></title><description><![CDATA[<p>hi,</p>
<p>ich lerne grad c++ und bin auf etwas gestoßen ,was ich nicht ganz verstehe.<br />
Was passiert genau wenn ich eine Funktion definiere, die eine Referenz als Rückgabe enthält (ich hab schon gegooglet und das Forum hier durchsucht, ich finde aber keine Antwort mit der ich das richtig verstehe)? In meinem Lehrbuch soll an einer stelle ein operator so überladen werden, dass man eine klasse bequem über cout ausgeben kann.</p>
<p>die klasse sieht ungefähr so aus :</p>
<pre><code class="language-cpp">class cZeit {
private:
	int _hour;
	int _min;
	int _sec;

public:
	cZeit() {};
	cZeit(int hour, int min, int sec=0) {
		_hour = hour;
		_min = min;
		_sec = sec; 
	}
	cZeit addieren(cZeit zeit);
	int getHour() {return _hour;}
	int getMin() {return _min;}
};
</code></pre>
<p>Um dann jetzt die Daten der Klasse ausgeben zu können, soll der &lt;&lt; operator überladen werden. also cout &lt;&lt; Objekt soll die daten ausgeben. In einfacher Form sieht das dann ungefähr so aus(ist als friend-Funktion in der Klasse noch drin, müsste noch eingefügt werden):</p>
<pre><code class="language-cpp">ostream &amp; operator&lt;&lt; (ostream &amp;ausgabe, const cZeit &amp;z) {
	ausgabe &lt;&lt; &quot;stunde: &quot; &lt;&lt; z._hour &lt;&lt; &quot;\nminute: &quot; &lt;&lt; z._min &lt;&lt; endl;
	return ausgabe;
}
</code></pre>
<p>Wenn ich jetzt entweder bei &amp;operator&lt;&lt; oder bei &amp;ausgabe es nicht als referenz schreibe, kommt ein fehler</p>
<pre><code class="language-cpp">Fehler	2	error C2248: &quot;std::basic_ios&lt;_Elem,_Traits&gt;::basic_ios&quot;: Kein Zugriff auf private Member, dessen Deklaration in der std::basic_ios&lt;_Elem,_Traits&gt;-Klasse erfolgte.
</code></pre>
<p>Was also genau geschieht wenn die Funktion eine Referenz zurückgibt (und warum muss cout als referenz übernommen werden)?</p>
<p>Außerdem was genau bedeutet es wenn man am ende einer methode</p>
<pre><code class="language-cpp">return *this
</code></pre>
<p>wiedergibt? In dem Buch wird gesagt, dass man eine Referenz auf das bearbeitete Objekt wiedergibt oder ist es doch nur eine Kopie?</p>
<p>Sorry wenn ich zuviele Fragen stelle, aber ich würds gerne verstehen <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>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284276/return-referenz-und-this</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 02:27:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284276.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Mar 2011 10:30:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to return Referenz und *this?? on Tue, 29 Mar 2011 10:33:12 GMT]]></title><description><![CDATA[<p>hi,</p>
<p>ich lerne grad c++ und bin auf etwas gestoßen ,was ich nicht ganz verstehe.<br />
Was passiert genau wenn ich eine Funktion definiere, die eine Referenz als Rückgabe enthält (ich hab schon gegooglet und das Forum hier durchsucht, ich finde aber keine Antwort mit der ich das richtig verstehe)? In meinem Lehrbuch soll an einer stelle ein operator so überladen werden, dass man eine klasse bequem über cout ausgeben kann.</p>
<p>die klasse sieht ungefähr so aus :</p>
<pre><code class="language-cpp">class cZeit {
private:
	int _hour;
	int _min;
	int _sec;

public:
	cZeit() {};
	cZeit(int hour, int min, int sec=0) {
		_hour = hour;
		_min = min;
		_sec = sec; 
	}
	cZeit addieren(cZeit zeit);
	int getHour() {return _hour;}
	int getMin() {return _min;}
};
</code></pre>
<p>Um dann jetzt die Daten der Klasse ausgeben zu können, soll der &lt;&lt; operator überladen werden. also cout &lt;&lt; Objekt soll die daten ausgeben. In einfacher Form sieht das dann ungefähr so aus(ist als friend-Funktion in der Klasse noch drin, müsste noch eingefügt werden):</p>
<pre><code class="language-cpp">ostream &amp; operator&lt;&lt; (ostream &amp;ausgabe, const cZeit &amp;z) {
	ausgabe &lt;&lt; &quot;stunde: &quot; &lt;&lt; z._hour &lt;&lt; &quot;\nminute: &quot; &lt;&lt; z._min &lt;&lt; endl;
	return ausgabe;
}
</code></pre>
<p>Wenn ich jetzt entweder bei &amp;operator&lt;&lt; oder bei &amp;ausgabe es nicht als referenz schreibe, kommt ein fehler</p>
<pre><code class="language-cpp">Fehler	2	error C2248: &quot;std::basic_ios&lt;_Elem,_Traits&gt;::basic_ios&quot;: Kein Zugriff auf private Member, dessen Deklaration in der std::basic_ios&lt;_Elem,_Traits&gt;-Klasse erfolgte.
</code></pre>
<p>Was also genau geschieht wenn die Funktion eine Referenz zurückgibt (und warum muss cout als referenz übernommen werden)?</p>
<p>Außerdem was genau bedeutet es wenn man am ende einer methode</p>
<pre><code class="language-cpp">return *this
</code></pre>
<p>wiedergibt? In dem Buch wird gesagt, dass man eine Referenz auf das bearbeitete Objekt wiedergibt oder ist es doch nur eine Kopie?</p>
<p>Sorry wenn ich zuviele Fragen stelle, aber ich würds gerne verstehen <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>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041714</guid><dc:creator><![CDATA[orolindu]]></dc:creator><pubDate>Tue, 29 Mar 2011 10:33:12 GMT</pubDate></item><item><title><![CDATA[Reply to return Referenz und *this?? on Tue, 29 Mar 2011 10:31:19 GMT]]></title><description><![CDATA[<p>Mist jetzt hab ich vermutlich ien zu spezielles Beispiel gegeben...<br />
Wenn mir jemand sagen kann was genau bei der Referenz-Rückgabe passiert wäre ich schon ein Stück weiter...</p>
<p>grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041716</guid><dc:creator><![CDATA[orolindu]]></dc:creator><pubDate>Tue, 29 Mar 2011 10:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to return Referenz und *this?? on Tue, 29 Mar 2011 10:44:22 GMT]]></title><description><![CDATA[<p>Weißt du was eine Referenz ist?<br />
Letztendlich ist die Rückgabe einer Referenz nicht anders als jede beliebige andere Rückgabe auch. Nur das hier eben eine Referenz auf die entsprechende Variable zurückgegeben wird.<br />
Es findet hier also keine Kopie statt. Weiterhin kann der Aufrufer der Funktion den Rückgabewert ändern.<br />
Beim ostream-Operator&lt;&lt; ist die Referenz einfach nötig weil ostream nicht kopierbar ist und man will die operatoren ja verketten können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041722</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 29 Mar 2011 10:44:22 GMT</pubDate></item><item><title><![CDATA[Reply to return Referenz und *this?? on Tue, 29 Mar 2011 10:49:15 GMT]]></title><description><![CDATA[<p>orolindu schrieb:</p>
<blockquote>
<p>Wenn mir jemand sagen kann was genau bei der Referenz-Rückgabe passiert wäre ich schon ein Stück weiter...</p>
</blockquote>
<p>Grundsätzlich ist eine Referenz nur ein Aliasname für ein Objekt. Bei einer Referenzrückgabe wird das jeweilige Objekt also zurückgegeben, ohne eine Kopie zu erzeugen.</p>
<p>&quot;return *this&quot; erzeugt daher nur dann eine Kopie, wenn man keine Referenz sondern eine Werteübergabe macht.</p>
<p>Hintergrund für Referenzübergaben ist, das man auf dem gleichen Objekt weiterarbeiten und dabei Aufrufe verketten kann. z.B. um immer auf den gleichen Stream auszugeben...</p>
<p>Gefährlich sind wiederum Referenzrückgaben von lokalen Variablen, da diese mit dem Verlassen der Funktion ungültig werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041729</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 29 Mar 2011 10:49:15 GMT</pubDate></item><item><title><![CDATA[Reply to return Referenz und *this?? on Tue, 29 Mar 2011 13:28:12 GMT]]></title><description><![CDATA[<p>erstmal danke für eure hilfe!</p>
<p>also was eine referenz ist, habe ich mittlerweile verstanden.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a>: dein letzter satz ist auch das, was mich beim rumprobieren etwas stutzig gemacht hat</p>
<pre><code class="language-cpp">int&amp; rechen(int b){
	b += 1;
	return b;
}
</code></pre>
<p>da gebe ich ja quasi die referenz auf meine temporäre variable b aus.</p>
<p>so würde ich ja eine referenz auf b ausgeben, die ihrerseits eine referenz auf die eingelesene variable ist:</p>
<pre><code class="language-cpp">int&amp; rechen(int&amp; b){
	b += 1;
	return b;
}
</code></pre>
<p>das erste dürfte meiner logik nach ja gar nicht gehen, da b nach verlassen derfunktion eigentlich nicht mehr existieren sollte. beim zweiten ist es doch lediglich eine zweifache referenz auf das eigentliche objekt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041837</guid><dc:creator><![CDATA[orolindu]]></dc:creator><pubDate>Tue, 29 Mar 2011 13:28:12 GMT</pubDate></item><item><title><![CDATA[Reply to return Referenz und *this?? on Tue, 29 Mar 2011 13:29:34 GMT]]></title><description><![CDATA[<p>Das ist korrekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041841</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 29 Mar 2011 13:29:34 GMT</pubDate></item><item><title><![CDATA[Reply to return Referenz und *this?? on Tue, 29 Mar 2011 13:32:35 GMT]]></title><description><![CDATA[<p>orolindu schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a>: dein letzter satz ist auch das, was mich beim rumprobieren etwas stutzig gemacht hat</p>
</blockquote>
<p>Nicht alles was scheinbar funktioniert ist auch richtig. In diesem Fall hattest du Glück, das der Speicherbereich noch nicht anderweitig verwendet wurden ist, und die Laufzeitumgebung oder das OS nicht bei dem Zugriff einen Strich durch die Rechnung gemacht hat.</p>
<p>Dein Beispiel ist klassisches &quot;undefiniertes Verhalten&quot;, und zieht die am schwersten zu findenden Fehler nach sich (da nicht &quot;reproduzierbar&quot;).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041844</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 29 Mar 2011 13:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to return Referenz und *this?? on Tue, 29 Mar 2011 13:33:57 GMT]]></title><description><![CDATA[<p>Ne, wieso zweifach? Im zweiten Beispiel hast Du nur eine einzige Referenz auf einen int-Wert; nicht etwa eine Referenz auf eine Referenz ... geht das überhaupt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041845</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Tue, 29 Mar 2011 13:33:57 GMT</pubDate></item><item><title><![CDATA[Reply to return Referenz und *this?? on Tue, 29 Mar 2011 13:35:26 GMT]]></title><description><![CDATA[<p>Ups, stimmt, das habe ich falsch verstanden. Es sind lediglich zwei Referenzen.</p>
<p>Und eine Referenz auf eine Referenz gibt es nicht, weil Referenzen nicht geändert werden können und das somit überhaupt keinen Sinn macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041846</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 29 Mar 2011 13:35:26 GMT</pubDate></item><item><title><![CDATA[Reply to return Referenz und *this?? on Tue, 29 Mar 2011 13:57:44 GMT]]></title><description><![CDATA[<p>ah, ok gut!</p>
<p>danke nochmal für alles!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041860</guid><dc:creator><![CDATA[orolindu]]></dc:creator><pubDate>Tue, 29 Mar 2011 13:57:44 GMT</pubDate></item></channel></rss>