<?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[Muss man für Klassen bzw. Strukturen Operator= überladen ?]]></title><description><![CDATA[<p>Hi, ich möchte eine Klasse bzw Struktur = einer anderen setzen...<br />
Muss ich einen operator= schreiben oder kann man einfach<br />
class = class bzw struct = struct ?? weil ich dachte immer<br />
strukuren bzw. klassen sind ja keine einfachen daten typen...</p>
<p>Gruß Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205759/muss-man-für-klassen-bzw-strukturen-operator-überladen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 13:21:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205759.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Feb 2008 19:19:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Muss man für Klassen bzw. Strukturen Operator= überladen ? on Sun, 17 Feb 2008 19:19:33 GMT]]></title><description><![CDATA[<p>Hi, ich möchte eine Klasse bzw Struktur = einer anderen setzen...<br />
Muss ich einen operator= schreiben oder kann man einfach<br />
class = class bzw struct = struct ?? weil ich dachte immer<br />
strukuren bzw. klassen sind ja keine einfachen daten typen...</p>
<p>Gruß Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457762</guid><dc:creator><![CDATA[operator=]]></dc:creator><pubDate>Sun, 17 Feb 2008 19:19:33 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man für Klassen bzw. Strukturen Operator= überladen ? on Sun, 17 Feb 2008 19:35:20 GMT]]></title><description><![CDATA[<p>Das hängt von der Art der Struktur ab. C++ definiert implizit immer einen Zuweisungsoperator, die Frage ist, ob er das macht, was du willst.</p>
<p>P.S.: Warum meldest du dich nicht im Forum an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457774</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 17 Feb 2008 19:35:20 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man für Klassen bzw. Strukturen Operator= überladen ? on Sun, 17 Feb 2008 19:38:41 GMT]]></title><description><![CDATA[<p>Hab dieses Forum hier erst neulich gefunden <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>
<p>Danke, ne also wenn ich einen &quot;operator=&quot; explizit in die Klasse implementiere,<br />
dann wäre das ja z.b. folgender code:</p>
<pre><code class="language-cpp">class Number
{
   public:
      Number &amp; operator=(const Number Obj);
};

Number &amp; Number::operator=(const Number Obj)
{
   m_Value = Obj.m_Value;
   return *this;
}
</code></pre>
<p>aber :</p>
<pre><code class="language-cpp">Number &amp; Number::operator=(const Number Obj) // &lt;- hier wird doch als Parameter auch eine direkte Zuweisung gemacht.. 
// ist das dann der &quot;unsichtbar&quot; mitkompilierte copy constructor ?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1457781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457781</guid><dc:creator><![CDATA[mach ich :)]]></dc:creator><pubDate>Sun, 17 Feb 2008 19:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man für Klassen bzw. Strukturen Operator= überladen ? on Sun, 17 Feb 2008 19:46:24 GMT]]></title><description><![CDATA[<p>Das ist das Objekt, dass rechts vom = steht. Also findet da keine Zuweisung statt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457786</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 17 Feb 2008 19:46:24 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man für Klassen bzw. Strukturen Operator= überladen ? on Sun, 17 Feb 2008 19:47:54 GMT]]></title><description><![CDATA[<p>alles klar danke... echt jutes forum..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457787</guid><dc:creator><![CDATA[Begeistert]]></dc:creator><pubDate>Sun, 17 Feb 2008 19:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man für Klassen bzw. Strukturen Operator= überladen ? on Sun, 17 Feb 2008 20:03:02 GMT]]></title><description><![CDATA[<p>mach ich <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="🙂"
    /> schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Number &amp; Number::operator=(const Number Obj) // &lt;- hier wird doch als Parameter auch eine direkte Zuweisung gemacht..
</code></pre>
</blockquote>
<p>Ein Funktionsparameter wird beim Funktionsaufruf nicht zugewiesen sondern initialisiert. Die Initialisierung eines Klassenobjektes geschieht durch den Aufruf des entsprechenden Konstruktors. Falls der Typ des Arguments einen anderen Typ als Number hat, wird zunächst ein temporäres Objekt vom Typ Number erzeugt (entweder weil Number einen entsprechenden Konstruktor hat - hier nicht - oder weil das Argument ein Klassenobjekt mit einem entsprechenden Konvertierungsoperator ist) und der Funktionsparameter wird dann aus diesem Objekt (bzw., falls das Argument vom Typ Number war, aus dem Argument selber) durch Aufruf des hier implizit deklarierten Copy-ctors erzeugt. Falls eine Konvertierung stattgefunden hat, oder das Argument ein ungebundenes temporäres Objekt ist, darf der Compiler diese Kopie vermeiden.</p>
<p>Wäre das Argument deines Operators kein Objekt sondern eine Referenz, wäre der Copy-ctor nat. aus dem Spiel, denn die Initialisierung einer Referenz geschieht ja nicht durch Aufruf eines Konstruktors (es könnte allerdings ein Konstruktor aufgerufen werden, um das Argument erst einmal passend zu konvertieren).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457796</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 17 Feb 2008 20:03:02 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man für Klassen bzw. Strukturen Operator= überladen ? on Sun, 17 Feb 2008 20:16:37 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Wäre das Argument deines Operators kein Objekt sondern eine Referenz, wäre der Copy-ctor nat. aus dem Spiel, denn die Initialisierung einer Referenz geschieht ja nicht durch Aufruf eines Konstruktors (es könnte allerdings ein Konstruktor aufgerufen werden, um das Argument erst einmal passend zu konvertieren).</p>
</blockquote>
<p>Um es leichter Verständlich zu machen:</p>
<p>Grundsätzlich sollte man Call-By-Reference dem Call-By-Value vorziehen, außer es handelt sich um integrale Datentypen (int, bool, double...). Sonst verursachst du noch eine Kopie die nicht sein muss.</p>
<p>Die Signatur des Zuweisungsoperators sollte daher so lauten:<br />
Number &amp; Number::operator=(const Number**&amp;** Obj);</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457804</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sun, 17 Feb 2008 20:16:37 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man für Klassen bzw. Strukturen Operator= überladen ? on Sun, 17 Feb 2008 20:37:10 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Number &amp; Number::operator=(const Number&amp; Obj);
</code></pre>
<p>Obj wird erstellt (normaler constru.) und dann mit dem argument &quot;ver-referenziert&quot;<br />
Also ist Obj zu einer Art Zeiger geworden ... oder hab ich das jetzt falsch verstanden ? -&gt; Ich hab diese Sachen noch nicht zu 100% drauf..</p>
<p>Achja und warum muss eigentlich &quot;operator+&quot; einen rückgabewert haben ?<br />
-&gt; den codeteil hatte ich aus einem tut das ich zur zeit durcharbeite...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457819</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457819</guid><dc:creator><![CDATA[nur zum verständnis...]]></dc:creator><pubDate>Sun, 17 Feb 2008 20:37:10 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man für Klassen bzw. Strukturen Operator= überladen ? on Sun, 17 Feb 2008 21:44:24 GMT]]></title><description><![CDATA[<p>nur zum verständnis... schrieb:</p>
<blockquote>
<p>Obj wird erstellt (normaler constru.) und dann mit dem argument &quot;ver-referenziert&quot;<br />
Also ist Obj zu einer Art Zeiger geworden ... oder hab ich das jetzt falsch verstanden ? -&gt; Ich hab diese Sachen noch nicht zu 100% drauf..</p>
</blockquote>
<p>Eine Referenz ist ein Alias(-name). Im wesentlichen Bedeutet Referenz also das es sich tatsächlich um das Original handelt, nur unter einem neuen Namen / Sichtbereich. Im Prinzip gibt es gewisse Ähnlichkeiten zu Zeigern [unter der Haube können es auch durchaus Zeiger sein], nur unterscheiden sich Zeiger und Referenzen in einigen Punkten auch (nicht unbedingt vollständig):</p>
<p>Referenzen verweisen auf genau eine Entsprechung. Du kannst werder eine Nullzuweisung machen noch den Verweis ändern (das Objekt wiederum ja, wenn es keine konstante Referenz ist). Referenzen erlauben eine schöner lesbare Syntax...</p>
<p>nur zum verständnis... schrieb:</p>
<blockquote>
<p>Achja und warum muss eigentlich &quot;operator+&quot; einen rückgabewert haben ?</p>
</blockquote>
<p>Du möchtest sicherlich so etwas schreiben können:</p>
<p>int a = 4 + 5;</p>
<p>Orientiere dich immer an den Integralen Datentypen... Du musst einen Wert zurückgeben wenn du auch eine Zuweisung oder Weiterverarbeitung erlauben willst.</p>
<p>Dabei gilt: Alle Operatoren die direkt auf das Objekt gehen (+=,-=...) sollten immer eine Selbstreferenz zurückgeben, Operatoren die das Objekt nicht direkt verändern (+,-...), sollten eine lokale Variable per Kopie zurückliefern...</p>
<p>Nun kommen wir zu dem Operator wo einige sich immer fragen warum er in der einen Form performanter sein kann als in der anderen...:</p>
<p>++i vs i++</p>
<pre><code class="language-cpp">int i = 0;
std::cout &lt;&lt; i;   // liefert 0
std::cout &lt;&lt; ++i; // liefert 1 (Direktes inkrement mit Referenzrückgabe)
std::cout &lt;&lt; i;   // liefert 1
std::cout &lt;&lt; i++; // liefert 1 (Indirektes Inkrement, alter Wert wird als Kopie zurückgegeben)
std::cout &lt;&lt; i;   // liefert 2
</code></pre>
<p>Genauer: (Ich werde hier mal schlechten Stil wie public Member der Einfachheit machen...)</p>
<pre><code class="language-cpp">stuct Zahl
{
    long Value;
    const operator++();
    const operator++(int);
};

// Prefixversion: ++i
const Zahl&amp; Zahl::operator++()
{
    ++this-&gt;Value;
    return *this;
}

// Postfixversion: i++ (der int Parameter dient nur der Unterscheidung)
const Zahl Zahl::operator++(int)
{
    Zahl temp(*this);  // Kopie merken (Kopierkonstruktoraufruf)
    ++this-&gt;Value;     // Inkrement
    return temp;       // Kopie zurückgeben (Wertrückgabe)
}
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457850</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sun, 17 Feb 2008 21:44:24 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man für Klassen bzw. Strukturen Operator= überladen ? on Sun, 17 Feb 2008 22:21:21 GMT]]></title><description><![CDATA[<p>Ok referenzen hab ich nun verstanden aber eins begreif ich noch nicht...<br />
wenn man eine selbst referenz von sich gibt...<br />
zb.: Number &amp; Number::operator=(const Number&amp; Obj);</p>
<p>wäre das ja sehr hilfreich bei folgendem aufruf:</p>
<pre><code class="language-cpp">number a,b,c;

a = b = c;
</code></pre>
<p>aber b würde ja zu a eine referenz geben ... aber a ist ja keine referenz ...<br />
würde dann der copy constructor automatisch in kraft treten =?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457881</guid><dc:creator><![CDATA[operator=]]></dc:creator><pubDate>Sun, 17 Feb 2008 22:21:21 GMT</pubDate></item><item><title><![CDATA[Reply to Muss man für Klassen bzw. Strukturen Operator= überladen ? on Sun, 17 Feb 2008 22:26:21 GMT]]></title><description><![CDATA[<p>Nein, a muss keine Referenz sein.</p>
<p>Er ÜBERNIMMT lediglich in copy ctor (Konstruktor) eine Referenz und gibt eine Referenz von sich zurück, was hier aber (bei a) keine Rolle mehr spielt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457887</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 17 Feb 2008 22:26:21 GMT</pubDate></item></channel></rss>