<?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[Verständnisfrage zum &amp;quot;=&amp;quot; Operator]]></title><description><![CDATA[<p>Hallo, ich habe eine Frage:<br />
Wenn ich zum Beispiel folgende Klasse habe</p>
<pre><code class="language-cpp">class Text
{
   private:
    std::string text;

   public:
    Text(const char* name) : text(name) {};       //1. Konstruktor
    Text(const std::string&amp; name) : text(name) {} //2. Konstruktor
    Text&amp; operator = (const Text&amp; objekt)         // = Operator
    {
        text=objekt.text;
        return *this;
    }
};
</code></pre>
<p>Jetzt kann ich - gemäß den Konstruktoren - ein Objekt der Klasse Text auf zwei Arten initialisieren:</p>
<pre><code class="language-cpp">std::string a = &quot;test&quot;;
Text obj1(a);
Text obj2(&quot;test&quot;);
</code></pre>
<p>Allerdings funktionieren auch folgende zuweisungen:</p>
<pre><code class="language-cpp">std::string a = &quot;test&quot;;
Text obj1=a;
Text obj2=&quot;test&quot;;
</code></pre>
<p>Ist der &quot;=&quot; Operator, der im zweiten Beispiel verwendet wird ein anderer, als der, den man Überladen kann? Denn in meiner Text-Klasse ist er nur als Kopierkonstruktor für andere Text-Objekte eingerichtet. Oder überlädt der Kompiler den &quot;=&quot; Operator am Beispiel der Konstruktoren automatisch, damit diese Zuweisungen funktionieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236861/verständnisfrage-zum-quot-quot-operator</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 16:42:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236861.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Mar 2009 00:01:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständnisfrage zum &amp;quot;=&amp;quot; Operator on Sat, 21 Mar 2009 00:01:43 GMT]]></title><description><![CDATA[<p>Hallo, ich habe eine Frage:<br />
Wenn ich zum Beispiel folgende Klasse habe</p>
<pre><code class="language-cpp">class Text
{
   private:
    std::string text;

   public:
    Text(const char* name) : text(name) {};       //1. Konstruktor
    Text(const std::string&amp; name) : text(name) {} //2. Konstruktor
    Text&amp; operator = (const Text&amp; objekt)         // = Operator
    {
        text=objekt.text;
        return *this;
    }
};
</code></pre>
<p>Jetzt kann ich - gemäß den Konstruktoren - ein Objekt der Klasse Text auf zwei Arten initialisieren:</p>
<pre><code class="language-cpp">std::string a = &quot;test&quot;;
Text obj1(a);
Text obj2(&quot;test&quot;);
</code></pre>
<p>Allerdings funktionieren auch folgende zuweisungen:</p>
<pre><code class="language-cpp">std::string a = &quot;test&quot;;
Text obj1=a;
Text obj2=&quot;test&quot;;
</code></pre>
<p>Ist der &quot;=&quot; Operator, der im zweiten Beispiel verwendet wird ein anderer, als der, den man Überladen kann? Denn in meiner Text-Klasse ist er nur als Kopierkonstruktor für andere Text-Objekte eingerichtet. Oder überlädt der Kompiler den &quot;=&quot; Operator am Beispiel der Konstruktoren automatisch, damit diese Zuweisungen funktionieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683680</guid><dc:creator><![CDATA[Gleich]]></dc:creator><pubDate>Sat, 21 Mar 2009 00:01:43 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage zum &amp;quot;=&amp;quot; Operator on Sat, 21 Mar 2009 00:21:41 GMT]]></title><description><![CDATA[<p>Erstens mal brauchst du weder Kopierkonstruktor noch Zuweisungsoperator für deine Klasse zu überladen. Eine memberweise Kopie ist ja gewünscht, und das machen die compilergenerierten Funktionen. Erst wenn du selber noch etwas tust (z.B. Deep Copy über Zeiger), brauchst du eigene Implementierungen.</p>
<p>Zweitens sind jeweils</p>
<pre><code class="language-cpp">Test obj1 = a;
Test obj1(a);
</code></pre>
<p>und</p>
<pre><code class="language-cpp">Test obj1 = &quot;test&quot;;
Test obj1(&quot;test&quot;);
</code></pre>
<p>äquivalent. Wenn das Gleichheitszeichen in der Initialisierung vorkommt, handelt es sich um einen Konstruktor- und keinen Zuweisungsoperatoraufruf. Somit kommt in deinem zweiten Beispiel nirgends ein <code>operator=</code> vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683681</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 21 Mar 2009 00:21:41 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage zum &amp;quot;=&amp;quot; Operator on Sat, 21 Mar 2009 00:22:32 GMT]]></title><description><![CDATA[<p>Deine Konstruktoren sind nicht &quot;explicit&quot;, d.h. sie erlauben auch implizite Konvertierungen.<br />
D.h. es gehen dann auch solche Sachen:</p>
<pre><code class="language-cpp">void foo(Text t)
{
   // ...
}

void bar()
{
    foo(&quot;sepp&quot;); // hier wird implizit mit Test::Test(const char*) ein Objekt erzeugt,
                 // und dieses dann mit dem vom Compiler erstellten copy-ctor kopiert, um es an foo() zu übergeben
}
</code></pre>
<p>Genau dasselbe wie oben passiert in deinem Beispiel: es wird erst über dem Konstruktor ein neues Objekt erzeugt, und dieses dann mit dem operator = zugewiesen.</p>
<p>Wenn du das nicht haben möchtest, musst du die Konstruktoren 'explicit' machen:</p>
<pre><code class="language-cpp">class Text
{
   private:
    std::string text;

   public:
    explicit Text(const char* name) : text(name) {};       //1. Konstruktor
    explicit Text(const std::string&amp; name) : text(name) {} //2. Konstruktor
    Text&amp; operator = (const Text&amp; objekt)         // = Operator
    {
        text=objekt.text;
        return *this;
    }
};
</code></pre>
<p>Grundsätzlich kann man sagen: vor jeden Konstruktor erstmal &quot;explicit&quot; schreiben, und nur dann ändern, wenn man *wirklich* implizite Konvertierungen erlauben will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683682</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 21 Mar 2009 00:22:32 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage zum &amp;quot;=&amp;quot; Operator on Sat, 21 Mar 2009 05:20:38 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>und dieses dann mit dem operator = zugewiesen.</p>
</blockquote>
<p>Ich gehe mal von einem Flüchtigkeitsfehler aus, weil es in deinem Code ja anders steht. <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>Wie Nexus schon bemerkte ist der Operator = bei den Initialisierungen nicht involviert sondern Konstruktor + Copy-Konstruktor bzw. optimiert nur der Konstruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1683693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683693</guid><dc:creator><![CDATA[Kritiker]]></dc:creator><pubDate>Sat, 21 Mar 2009 05:20:38 GMT</pubDate></item><item><title><![CDATA[Reply to Verständnisfrage zum &amp;quot;=&amp;quot; Operator on Sat, 21 Mar 2009 16:23:59 GMT]]></title><description><![CDATA[<p>Kritiker schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>und dieses dann mit dem operator = zugewiesen.</p>
</blockquote>
<p>Ich gehe mal von einem Flüchtigkeitsfehler aus, weil es in deinem Code ja anders steht. <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>Wie Nexus schon bemerkte ist der Operator = bei den Initialisierungen nicht involviert sondern Konstruktor + Copy-Konstruktor bzw. optimiert nur der Konstruktor.</p>
</blockquote>
<p>Ja, du hast recht <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1683860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1683860</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 21 Mar 2009 16:23:59 GMT</pubDate></item></channel></rss>