<?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[Frage zu Stackobjekt]]></title><description><![CDATA[<p>Hi...<br />
Folgender Fall:</p>
<pre><code class="language-cpp">String String::Capitalize()
{
	if (this-&gt;m_iLength &amp;&amp; this-&gt;m_pszString[0] &gt;= 'a' &amp;&amp;  this-&gt;m_pszString[0] &lt;= 'z')
	{
		this-&gt;m_pszString[0] -= 32;
		return String(this-&gt;m_pszString);
	}

	return *((String*)this);
	// wird hier bereits eine neue Instanz erzeugt? Oder muss ich folgendes machen:
	// return String(this-&gt;m_pszString);
}

String bla(&quot;hallo&quot;);
String x = bla.Capitalize();
</code></pre>
<p>Der String, der zurückgegeben wird, soll unabhängig vom aufgerufenen String sein.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264718/frage-zu-stackobjekt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 14:30:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264718.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Apr 2010 19:45:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 19:45:05 GMT]]></title><description><![CDATA[<p>Hi...<br />
Folgender Fall:</p>
<pre><code class="language-cpp">String String::Capitalize()
{
	if (this-&gt;m_iLength &amp;&amp; this-&gt;m_pszString[0] &gt;= 'a' &amp;&amp;  this-&gt;m_pszString[0] &lt;= 'z')
	{
		this-&gt;m_pszString[0] -= 32;
		return String(this-&gt;m_pszString);
	}

	return *((String*)this);
	// wird hier bereits eine neue Instanz erzeugt? Oder muss ich folgendes machen:
	// return String(this-&gt;m_pszString);
}

String bla(&quot;hallo&quot;);
String x = bla.Capitalize();
</code></pre>
<p>Der String, der zurückgegeben wird, soll unabhängig vom aufgerufenen String sein.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881249</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 11 Apr 2010 19:45:05 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 19:48:47 GMT]]></title><description><![CDATA[<p>Kommt auf die Implementierung von <code>String</code> an. Da sollte aber der Kopierkonstruktor aufgerufen werden.</p>
<p>Wieso überhaupt die rumcasterei? <code>this</code> ist ja vom Typ <code>String</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881250</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 11 Apr 2010 19:48:47 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 19:57:45 GMT]]></title><description><![CDATA[<p>Ein Kopierkonstruktor, wie sieht der aus? <code>operator=</code> ist überladen, meinst du den?<br />
Edit: Ach du meinst <code>String(const String &amp;)</code> - ja, der existiert.</p>
<p>Das mit der Rumcasterei kommt von hier:</p>
<pre><code class="language-cpp">String &amp;String::operator=(const char *Data) const
{
	this-&gt;Copy(Data);
	return *((String*)this);
}
</code></pre>
<p>Wenn ich das ohne den Cast mache, kommt folgender Fehler (MSVC++ 08):<br />
<code>error C2440: 'return': 'const String' kann nicht in 'String &amp;' konvertiert werden</code><br />
Das liegt aber daran, dass ich dort eine Referenz zurückgebe. Da ich aber dachte, es liegt am const-Attribute (welches ich im ersten Beitrag übrigens vergessen hatte), habe ich es gecastet. Aber wenn ich keine Referenz zurückgebe geht es auch ohne.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881254</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 11 Apr 2010 19:57:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 19:57:40 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Wenn ich das ohne den Cast mache, kommt folgender Fehler</p>
</blockquote>
<p>Und um den Fehler zu &quot;beheben&quot;, castet man einfach, was das Zeug hält?</p>
<p>Das Problem ist, dass ein Zuweisungsoperator wohl <strong>die</strong> Memberfunktion ist, die am allerwenigsten von allen konstant sein kann. Schliesslich wird bei jedem Aufruf das komplette Objekt überschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881259</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 11 Apr 2010 19:57:40 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 20:05:53 GMT]]></title><description><![CDATA[<p>Mhh, stimmt. Ohne das <code>const</code> geht es. Aber das brauche ich doch wiederrum, zum Beispiel in folgender Situation:</p>
<pre><code class="language-cpp">void CPlayer::ServerExecute(const String &amp;Command)
{
	pHelpers-&gt;ClientCommand(this-&gt;m_pEdict, Command.ToCString());
	// Fehler (ohne const-Modifier): error C2662: 'String::ToCString': this-Zeiger kann nicht von 'const String' in 'String &amp;' konvertiert werden
}
</code></pre>
<p>Wenn Command keine <code>const</code> -Referenz geht es, es soll aber eine sein. Ich wüsste nicht wie ich das Problem anders lösen könnte?</p>
<p>Edit: Ahso... Ich glaube ich verstehe das Problem jetzt erst richtig. Sobald ich einer Funktion das <code>const</code> -Attribute vergebe, funktioniert es. Das heißt, das ich auf alle Funktionen, die nur lesenden Zugriff auf die Membervariablen haben, den <code>const</code> -Modifier setzen kann? Und immer wenn ich einen <code>String</code> nur lesen brauche, verwende ich den <code>const</code> -Modifier, oder nicht?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881261</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 11 Apr 2010 20:05:53 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 20:09:15 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Mhh, stimmt. Ohne das <code>const</code> geht es. Aber das brauche ich doch wiederrum, zum Beispiel in folgender Situation:</p>
</blockquote>
<p>Sofern du Const-Correctness richtig einsetzt, musst du nicht casten. Sobald du <code>const</code> wegcastest, liegt fast sicher ein Designfehler vor.</p>
<p>theliquidwave schrieb:</p>
<blockquote>
<p>Sobald ich einer Funktion das <code>const</code> -Attribute vergebe, funktioniert es. Das heißt, das ich auf alle Funktionen, die nur lesenden Zugriff auf die Membervariablen haben, den <code>const</code> -Modifier setzen kann? Und immer wenn ich einen <code>String</code> nur lesen brauche, verwende ich den <code>const</code> -Modifier, oder nicht?</p>
</blockquote>
<p>Exakt, genau so solltest du das tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881266</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 11 Apr 2010 20:09:15 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 20:11:48 GMT]]></title><description><![CDATA[<p>Sehr schön. Habe das mal gemacht - und voila: Es funktioniert wie gewünscht, ohne irgendwelche Casts! Danke <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>Eine Frage habe ich dennoch... Auf Wikipedia steht zum Thema <a href="http://de.wikipedia.org/wiki/Kopierkonstruktor#Aufruf" rel="nofollow">Kopierkonstruktor</a> folgendes:</p>
<pre><code class="language-cpp">MitCopyKonstruktor mitCC2 = mitCC; // Kopierkonstruktor, Zuweisungssyntax
</code></pre>
<p>Wird dort nun <code>operator=</code> oder Kopierkonstruktor oder beides aufgerufen?!</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881269</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 11 Apr 2010 20:11:48 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 20:16:16 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Sehr schön. Habe das mal gemacht - und voila: Es funktioniert wie gewünscht, ohne irgendwelche Casts! Danke <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>Eine Frage habe ich dennoch... Auf Wikipedia steht zum Thema <a href="http://de.wikipedia.org/wiki/Kopierkonstruktor#Aufruf" rel="nofollow">Kopierkonstruktor</a> folgendes:</p>
<pre><code class="language-cpp">MitCopyKonstruktor mitCC2 = mitCC; // Kopierkonstruktor, Zuweisungssyntax
</code></pre>
<p>Wird dort nun <code>operator=</code> oder Kopierkonstruktor oder beides aufgerufen?!</p>
<p>Gruß</p>
</blockquote>
<p>Wies im Kommentarsteht: Es ist eine Zuweisungssyntax, aber aufgerufen wird (nur) der Copyctor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881272</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sun, 11 Apr 2010 20:16:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 20:23:19 GMT]]></title><description><![CDATA[<p>Mhh.. Gibt es dann überhaupt einen Fall, in denen der <code>operator=</code> gebraucht wird?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881278</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 11 Apr 2010 20:23:19 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 20:26:32 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Mhh.. Gibt es dann überhaupt einen Fall, in denen der <code>operator=</code> gebraucht wird?</p>
<p>Gruß</p>
</blockquote>
<p>Klar, wenn du den Zuweisungsoperator NACH Definition deines Objektes benutzt:</p>
<pre><code class="language-cpp">Foo f1;
Foo f2;
Foo f3 = f1; // CopyCtor
f2 = f1; // operator=
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1881279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881279</guid><dc:creator><![CDATA[this-*gt*that]]></dc:creator><pubDate>Sun, 11 Apr 2010 20:26:32 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 20:26:48 GMT]]></title><description><![CDATA[<p>Klar, wenn du 2 Objekte hast, welche bereits initialisiert sind und dann das eine dem anderen zuweist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881280</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 11 Apr 2010 20:26:48 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Sun, 11 Apr 2010 21:57:48 GMT]]></title><description><![CDATA[<p>Ahso... Jetzt habe ich es erst richtig verstanden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /><br />
Danke!</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881319</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sun, 11 Apr 2010 21:57:48 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Stackobjekt on Mon, 12 Apr 2010 11:55:10 GMT]]></title><description><![CDATA[<p>war redundant<br />
(wurde ja schon geschrieben dass op. = nicht const sein sollte)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881519</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 12 Apr 2010 11:55:10 GMT</pubDate></item></channel></rss>