<?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[Den überladenen Zuweisungsoperator der Superklasse verwenden.]]></title><description><![CDATA[<p>Hallo Leute. Ich habe eine Frage, die sich auf einen Code bezieht, der sich <a href="http://pastie.org/3336164" rel="nofollow">dort</a> finden lässt.<br />
Wie man sieht, gibt es eine Klasse Becher und eine Unterklasse BecherMitAufdruck. In der Oberklasse habe ich einen überladenen Zuweisungsoperator implementiert.</p>
<pre><code class="language-cpp">Becher&amp; Becher::operator=(const Becher &amp;b)
{
	if (this != &amp;b)
	{
		delete [] inhalt;
		inhalt = strdupnew(b.inhalt);
		fassungsvermoegen = b.fassungsvermoegen;
		fuellgrad = b.fuellgrad;
	}
	return *this;
}
</code></pre>
<p>In der Unterklasse wird der Operator auch überladen:</p>
<pre><code class="language-cpp">BecherMitAufdruck&amp; BecherMitAufdruck::operator=(const BecherMitAufdruck &amp;b)
{
	if (this != &amp;b)
		{
			delete [] inhalt;
			delete [] aufdruck;
			inhalt = strdupnew(b.inhalt);
			aufdruck = strdupnew(b.aufdruck);
			fassungsvermoegen = b.fassungsvermoegen;
			fuellgrad = b.fuellgrad;
		}
	return *this;
}
</code></pre>
<p>Ich würde gern in dieser Funktion meinen bereits überladenen Operator der Superklasse verwenden anstatt, die Zuweisungen, die er macht, nochmal zu implementieren, weil dadurch ja eigentlich der Sinn der Vererbung teilweise verloren geht. Ich habe versucht</p>
<pre><code class="language-cpp">(Becher)(*this) = (Becher)b;
</code></pre>
<p>aber das geht nicht. Mir ist klar, dass ich irgendwie den Bereichoperator anwenden soll, z.B.:</p>
<pre><code class="language-cpp">Becher::operator=(b)
</code></pre>
<p>aber ich komme nicht darauf, wie man das für den Objekt *this macht.</p>
<p>P.s.: ich hoffe, ich habe mich beim ersten Eintrag nicht all zu viel blamiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299354/den-überladenen-zuweisungsoperator-der-superklasse-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 07:57:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299354.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Feb 2012 09:36:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Thu, 09 Feb 2012 09:36:05 GMT]]></title><description><![CDATA[<p>Hallo Leute. Ich habe eine Frage, die sich auf einen Code bezieht, der sich <a href="http://pastie.org/3336164" rel="nofollow">dort</a> finden lässt.<br />
Wie man sieht, gibt es eine Klasse Becher und eine Unterklasse BecherMitAufdruck. In der Oberklasse habe ich einen überladenen Zuweisungsoperator implementiert.</p>
<pre><code class="language-cpp">Becher&amp; Becher::operator=(const Becher &amp;b)
{
	if (this != &amp;b)
	{
		delete [] inhalt;
		inhalt = strdupnew(b.inhalt);
		fassungsvermoegen = b.fassungsvermoegen;
		fuellgrad = b.fuellgrad;
	}
	return *this;
}
</code></pre>
<p>In der Unterklasse wird der Operator auch überladen:</p>
<pre><code class="language-cpp">BecherMitAufdruck&amp; BecherMitAufdruck::operator=(const BecherMitAufdruck &amp;b)
{
	if (this != &amp;b)
		{
			delete [] inhalt;
			delete [] aufdruck;
			inhalt = strdupnew(b.inhalt);
			aufdruck = strdupnew(b.aufdruck);
			fassungsvermoegen = b.fassungsvermoegen;
			fuellgrad = b.fuellgrad;
		}
	return *this;
}
</code></pre>
<p>Ich würde gern in dieser Funktion meinen bereits überladenen Operator der Superklasse verwenden anstatt, die Zuweisungen, die er macht, nochmal zu implementieren, weil dadurch ja eigentlich der Sinn der Vererbung teilweise verloren geht. Ich habe versucht</p>
<pre><code class="language-cpp">(Becher)(*this) = (Becher)b;
</code></pre>
<p>aber das geht nicht. Mir ist klar, dass ich irgendwie den Bereichoperator anwenden soll, z.B.:</p>
<pre><code class="language-cpp">Becher::operator=(b)
</code></pre>
<p>aber ich komme nicht darauf, wie man das für den Objekt *this macht.</p>
<p>P.s.: ich hoffe, ich habe mich beim ersten Eintrag nicht all zu viel blamiert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178782</guid><dc:creator><![CDATA[DannyLo]]></dc:creator><pubDate>Thu, 09 Feb 2012 09:36:05 GMT</pubDate></item><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Thu, 09 Feb 2012 09:41:17 GMT]]></title><description><![CDATA[<p>Du musst den operator= der Oberklasse aufrufen lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178785</guid><dc:creator><![CDATA[Helmut.Jakoby]]></dc:creator><pubDate>Thu, 09 Feb 2012 09:41:17 GMT</pubDate></item><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Thu, 09 Feb 2012 09:46:40 GMT]]></title><description><![CDATA[<p>Helmut.Jakoby schrieb:</p>
<blockquote>
<p>Du musst den operator= der Oberklasse aufrufen lassen.</p>
</blockquote>
<p>Genau so heißt das Thema. Die Frage ist: wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178788</guid><dc:creator><![CDATA[DannyLo]]></dc:creator><pubDate>Thu, 09 Feb 2012 09:46:40 GMT</pubDate></item><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Thu, 09 Feb 2012 09:51:10 GMT]]></title><description><![CDATA[<p>DannyLo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Becher::operator=(b)
</code></pre>
</blockquote>
<p>So:</p>
<pre><code class="language-cpp">Becher::operator=(*this)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2178792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178792</guid><dc:creator><![CDATA[ich bins]]></dc:creator><pubDate>Thu, 09 Feb 2012 09:51:10 GMT</pubDate></item><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Thu, 09 Feb 2012 09:56:33 GMT]]></title><description><![CDATA[<p>DannyLo schrieb:</p>
<blockquote>
<p>Ich habe versucht</p>
<pre><code class="language-cpp">(Becher)(*this) = (Becher)b;
</code></pre>
<p>aber das geht nicht.</p>
</blockquote>
<p>Das ergibt auch keinen Sinn mit den Typen. Wenn dann mit Referenztypen:</p>
<pre><code class="language-cpp">(Becher&amp;)*this = b; // b muss man nicht casten
// oder besser:
static_cast&lt;Becher&amp;&gt;(*this) = b;
</code></pre>
<blockquote>
<p>Mir ist klar, dass ich irgendwie den Bereichoperator anwenden soll, z.B.:</p>
<pre><code class="language-cpp">Becher::operator=(b)
</code></pre>
<p>aber ich komme nicht darauf, wie man das für den Objekt *this macht.</p>
</blockquote>
<p>Das this sollte wie immer automatisch mit übergeben werden. Ob du nun</p>
<pre><code class="language-cpp">this-&gt;Becher::operator=(b);
</code></pre>
<p>oder so wie du schreibst, spielt keine Rolle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178795</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 09 Feb 2012 09:56:33 GMT</pubDate></item><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Thu, 09 Feb 2012 09:56:41 GMT]]></title><description><![CDATA[<p>ich bins schrieb:</p>
<blockquote>
<p>DannyLo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Becher::operator=(b)
</code></pre>
</blockquote>
<p>So:</p>
<pre><code class="language-cpp">Becher::operator=(*this)
</code></pre>
</blockquote>
<p>Also,</p>
<pre><code class="language-cpp">*this=(b);
</code></pre>
<p>ist äquivalent zu</p>
<pre><code class="language-cpp">*this.operator=(b);
</code></pre>
<p>Deswegen sind deine Vorschläge leider nicht richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178797</guid><dc:creator><![CDATA[DannyLo]]></dc:creator><pubDate>Thu, 09 Feb 2012 09:56:41 GMT</pubDate></item><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Thu, 09 Feb 2012 10:13:18 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Das this sollte wie immer automatisch mit übergeben werden. Ob du nun</p>
<pre><code class="language-cpp">this-&gt;Becher::operator=(b);
</code></pre>
<p>oder so wie du schreibst, spielt keine Rolle.</p>
</blockquote>
<p>Wow, das geht ja. Ich habe gar nicht erwartet, dass</p>
<pre><code class="language-cpp">Becher::operator=(b);
</code></pre>
<p>tatsäslich funktioniert, und habe mir deswegen das Leben schwerer gemacht.<br />
Kann mir vielleicht jemand deutlich erklären, warum das so klappt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178808</guid><dc:creator><![CDATA[DannyLo]]></dc:creator><pubDate>Thu, 09 Feb 2012 10:13:18 GMT</pubDate></item><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Thu, 09 Feb 2012 10:24:57 GMT]]></title><description><![CDATA[<p>Verstehe ich dich richtig, dass Du Becher::inhalt nur in Becher&amp; Becher::operator=(const Becher &amp;b) aus b übernehmen willst?<br />
Darum musst Du den Zuweisungsoperator von Becher im Zuweisungsoperator mit b aufrufen und nicht mit this (this soll ja als Unterklasse inhalt von b bekommen.<br />
Edit: Warum hast du nicht deine möglichen Lösungen ausprobiert? Die eine war ja richtig. Siehe mein vorheriges Posting &quot;Du musst den operator= der Oberklasse aufrufen lassen. &quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178812</guid><dc:creator><![CDATA[Helmut.Jakoby]]></dc:creator><pubDate>Thu, 09 Feb 2012 10:24:57 GMT</pubDate></item><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Thu, 09 Feb 2012 10:45:18 GMT]]></title><description><![CDATA[<p>Helmut.Jakoby schrieb:</p>
<blockquote>
<p>Verstehe ich dich richtig, dass Du Becher::inhalt nur in Becher&amp; Becher::operator=(const Becher &amp;b) aus b übernehmen willst?</p>
</blockquote>
<p>inhalt, und zwei andere Variablen: fassungsvermoegen und fuellgrad.</p>
<p>Helmut.Jakoby schrieb:</p>
<blockquote>
<p>Darum musst Du den Zuweisungsoperator von Becher im Zuweisungsoperator mit b aufrufen und nicht mit this (this soll ja als Unterklasse inhalt von b bekommen.</p>
</blockquote>
<p>Das ist mir ja klar, aber der Zuweisungsoperator ist immer noch eine Elementfunktion, und ich dachte mir ich muss sie unbedingt für den Objekt *this aufrufen, weil ich nach obigem Schema gedacht habe, dass a=b aquivalent zu **a.**operator=(b) ist.</p>
<p>Helmut.Jakoby schrieb:</p>
<blockquote>
<p>Edit: Warum hast du nicht deine möglichen Lösungen ausprobiert?</p>
</blockquote>
<p>Wie schon oben erwähnt, ich habe es für unmöglich gehalten, dass die Lösung richtig ist. Das war mein Fehler, tut mir leid.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178816</guid><dc:creator><![CDATA[DannyLo]]></dc:creator><pubDate>Thu, 09 Feb 2012 10:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Thu, 09 Feb 2012 11:02:50 GMT]]></title><description><![CDATA[<p>Wenn du std::string statt char* verwenden würdest, könntest du dir den operator= auch komplett sparen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178820</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Thu, 09 Feb 2012 11:02:50 GMT</pubDate></item><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Thu, 09 Feb 2012 11:04:59 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Wenn du std::string statt char* verwenden würdest, könntest du dir den operator= auch komplett sparen.</p>
</blockquote>
<p>Ich hatte eine bestimmte Aufgabenstellung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2178823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2178823</guid><dc:creator><![CDATA[DannyLo]]></dc:creator><pubDate>Thu, 09 Feb 2012 11:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to Den überladenen Zuweisungsoperator der Superklasse verwenden. on Fri, 10 Feb 2012 19:31:42 GMT]]></title><description><![CDATA[<p><a href="http://www.cppbuch.de/cppbuchw.tgz" rel="nofollow">http://www.cppbuch.de/cppbuchw.tgz</a><br />
herunterladen und entpacken. Im Verzeichnis cppbuch/k9/zuweisung_vererbung ist ein vollständiges Beispiel, sogar mit 3 Vererbungsebenen und char* Attributen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2179597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2179597</guid><dc:creator><![CDATA[waldschrat919]]></dc:creator><pubDate>Fri, 10 Feb 2012 19:31:42 GMT</pubDate></item></channel></rss>