<?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[Assignment Operator]]></title><description><![CDATA[<p>Hallo.</p>
<p>ich habe eine Frage. Sollte eurer Meinung nach jede Klasse einen Assignment Operator und einen Copy Konstruktor haben? Wozu brauch man die eigentlich? Als Beispiel habe ich hier folgenden Code, bei dem ich erst dachte, man muss einen Assignment Operator nehmen, doch es klappt auch ohne diesen:</p>
<pre><code class="language-cpp">class Klasse
{
public:
	Klasse(void):VALUE(0){}
	~Klasse(void){}
	void SetVAL (int i)
	{
		VALUE = i;
	}
private:
	int VALUE;
};

int main()
{ 
	Klasse A,B;

	A.SetVAL(9);

	B = A;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/166427/assignment-operator</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 09:18:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/166427.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Nov 2006 07:10:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 07:10:47 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>ich habe eine Frage. Sollte eurer Meinung nach jede Klasse einen Assignment Operator und einen Copy Konstruktor haben? Wozu brauch man die eigentlich? Als Beispiel habe ich hier folgenden Code, bei dem ich erst dachte, man muss einen Assignment Operator nehmen, doch es klappt auch ohne diesen:</p>
<pre><code class="language-cpp">class Klasse
{
public:
	Klasse(void):VALUE(0){}
	~Klasse(void){}
	void SetVAL (int i)
	{
		VALUE = i;
	}
private:
	int VALUE;
};

int main()
{ 
	Klasse A,B;

	A.SetVAL(9);

	B = A;

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1183519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183519</guid><dc:creator><![CDATA[Hans Wurst]]></dc:creator><pubDate>Wed, 29 Nov 2006 07:10:47 GMT</pubDate></item><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 07:25:26 GMT]]></title><description><![CDATA[<p>Hans Wurst schrieb:</p>
<blockquote>
<p>Sollte eurer Meinung nach jede Klasse einen Assignment Operator und einen Copy Konstruktor haben?</p>
</blockquote>
<p>jede Klasse HAT einen op= und Copy-Ctor (wenn du selber keinen definierst, erzeugt dir der Compiler einen), also brauchst du im Normalfall keine eigenen</p>
<blockquote>
<p>Wozu brauch man die eigentlich?</p>
</blockquote>
<p>Du benötigst nur eigene Operatoren, wenn das Default-Verhalten für deine Klasse nicht geeignet ist (das passiert meistens dann, wenn du mit Zeigern operierst und jedes Objekt eine eigene Kopie des Speichers bekommen soll - die Default-Implementation führt eine flache Kopie durch, so daß hinterher alle Beteiligten sich einen Speicherblock teilen müssen).</p>
<p>In dem Zusammenhang gilt auch die &quot;Rule of Three&quot;: Copy-Ctor, operator= und Dtor sollten immer zu dritt auftreten (wenn du einen von ihnen brauchst, benötigst du idR alle drei).</p>
<blockquote>
<p>Als Beispiel habe ich hier folgenden Code, bei dem ich erst dachte, man muss einen Assignment Operator nehmen, doch es klappt auch ohne diesen:</p>
</blockquote>
<p>Ja, hier hast du auch nur einen int-Wert gespeichert, den kann die Default-Version problemlos kopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183525</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 29 Nov 2006 07:25:26 GMT</pubDate></item><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 08:16:46 GMT]]></title><description><![CDATA[<p>Hans Wurst schrieb:</p>
<blockquote>
<p>Sollte eurer Meinung nach jede Klasse einen Assignment Operator und einen Copy Konstruktor haben?</p>
</blockquote>
<p>Nach außen hin, nein. Manchmal ist es sinvoll, die Benutzung mittels Verwendung des private-Bereichs zu verbieten. Ansonsten gilt, was CStoll schon gesagt hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183567</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Wed, 29 Nov 2006 08:16:46 GMT</pubDate></item><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 09:29:20 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Hans Wurst schrieb:</p>
<blockquote>
<p>Sollte eurer Meinung nach jede Klasse einen Assignment Operator und einen Copy Konstruktor haben?</p>
</blockquote>
<p>jede Klasse HAT einen op= und Copy-Ctor (wenn du selber keinen definierst, erzeugt dir der Compiler einen), ...</p>
</blockquote>
<p>Hi,</p>
<p>IIRC: ... solange ich selber keinen deklariere, oder ?</p>
<p>Das</p>
<pre><code class="language-cpp">class A {
    A const&amp; operator=(A const&amp;);
};
// A::operator=() nicht implementiert
</code></pre>
<p>sollte doch dazu führen, dass meine Klasse keinen operator=() hat, oder habe ich das falsch verstanden ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183572</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 29 Nov 2006 09:29:20 GMT</pubDate></item><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 08:31:20 GMT]]></title><description><![CDATA[<p>Doch, diese Klasse hat einen op= (btw solltest du den korrekten Prototyp verwenden, damit der Compiler das akzeptiert), daß der Linker ihn nicht findet, steht auf einem anderen Blatt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183580</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 29 Nov 2006 08:31:20 GMT</pubDate></item><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 09:30:54 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Doch, diese Klasse hat einen op= (btw solltest du den korrekten Prototyp verwenden, damit der Compiler das akzeptiert), daß der Linker ihn nicht findet, steht auf einem anderen Blatt.</p>
</blockquote>
<p>Was heißt in dem Zusammenhang dann &quot;... hat einen operator=() ...&quot; ? Dass es im objectcode der Klasse einen entsprechenden entrypoint gibt ? ....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183635</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 29 Nov 2006 09:30:54 GMT</pubDate></item><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 09:33:48 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Was heißt in dem Zusammenhang dann &quot;... hat einen operator=() ...&quot; ? Dass es im objectcode der Klasse einen entsprechenden entrypoint gibt ? ....</p>
</blockquote>
<p>Nein, den gibt es eben nicht. Das führt zu einem Linkerfehler &quot;undefined reference&quot;, was landläufig als &quot;ist vergessen worden&quot; interpretiert werden könnte.</p>
<p>Willst Du eine Zuweisung wirkungsvoll unterbinden, mach den op= am besten private <strong>und</strong> lass die Implementierung weg, dann wirft der Compiler schon Fehler und der Linker brauch sich um den Entry garnicht mehr zu kümmern (da Aufruf garnicht compiliert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183638</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 29 Nov 2006 09:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 09:38:21 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Doch, diese Klasse hat einen op= (btw solltest du den korrekten Prototyp verwenden, damit der Compiler das akzeptiert), daß der Linker ihn nicht findet, steht auf einem anderen Blatt.</p>
</blockquote>
<p>Wenn Du das so sehen möchtest, dann hat jede Klasse einen op=. Mehr als private und nicht implementiert geht nunmal nicht.</p>
<p>Da &quot;hat nen op=&quot; und &quot;hat keinen op=&quot; aber so schön einfach sind um drüber zu reden, finde ich man sollte in diesem Fall ruhig sage dürfen, daß die Klasse keinen hat. Das hält die Aussage angenehm kurz und jeder weiß was gemeint ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183641</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Wed, 29 Nov 2006 09:38:21 GMT</pubDate></item><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 09:42:54 GMT]]></title><description><![CDATA[<p>Jester schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Doch, diese Klasse hat einen op= (btw solltest du den korrekten Prototyp verwenden, damit der Compiler das akzeptiert), daß der Linker ihn nicht findet, steht auf einem anderen Blatt.</p>
</blockquote>
<p>Wenn Du das so sehen möchtest, dann hat jede Klasse einen op=.</p>
</blockquote>
<p>Sag ich doch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
(OK, es gibt ein paar Sonderfälle, wo der Compiler sich weigert, einen op= zu erzeugen)</p>
<blockquote>
<p>Mehr als private und nicht implementiert geht nunmal nicht.</p>
</blockquote>
<p>OK, das ist auch eine Sichtweise - in dem Fall hat die Klasse halt <em>keinen verwertbaren</em> operator=.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183644</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 29 Nov 2006 09:42:54 GMT</pubDate></item><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 13:59:17 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>...was landläufig als &quot;ist vergessen worden&quot; interpretiert werden könnte....</p>
</blockquote>
<p>... aber was &quot;vergessen wurde&quot; wird landläufig auch als &quot;ist nicht da&quot; interpretiert; deswegen finde ich die Aussage &quot;Klasse hat keinen&quot; durchaus berechtigt in dem Fall.</p>
<p>Dass Compilefehler immer Linkfehlern vorzuziehen sind (vA für &quot;Fremdnutzer&quot; einer Klasse), ist mir vollkommen klar. Mir geht es nur um die Aussage &quot;Klasse hat immer einen op=; wenn man keinen eigenen definiert, macht der Compiler einen&quot;, die ich nicht so richtig finde.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183761</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 29 Nov 2006 13:59:17 GMT</pubDate></item><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 13:42:46 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Mir geht es nur um die Aussage &quot;Klasse hat immer einen op=, <em>wenn man keinen eigenen definiert</em>&quot;, die ich nicht so richtig finde (BTW: Wenn man einen eigenen definiert, hat man erst Recht einen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ).</p>
</blockquote>
<p>Das habe ich so nicht gesagt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183766</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 29 Nov 2006 13:42:46 GMT</pubDate></item><item><title><![CDATA[Reply to Assignment Operator on Wed, 29 Nov 2006 13:59:32 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Mir geht es nur um die Aussage &quot;Klasse hat immer einen op=, <em>wenn man keinen eigenen definiert</em>&quot;, die ich nicht so richtig finde (BTW: Wenn man einen eigenen definiert, hat man erst Recht einen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> ).</p>
</blockquote>
<p>Das habe ich so nicht gesagt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Stimmt - sorry, habe ich korrigiert.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183789</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 29 Nov 2006 13:59:32 GMT</pubDate></item></channel></rss>