<?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[Kopierkonstruktor für ein Member-Array]]></title><description><![CDATA[<p>Da das eigentliche Problem nichts mit der VCL zu tun hat, habe ich es hier gepostet. Falls falsch, bitte verschieben...</p>
<p>Da ich in der Klasse CTupel ein int-Array verwende, habe ich den Kopierkonstruktor überladen:</p>
<pre><code class="language-cpp">CTupel&amp; CTupel::operator=(CTupel rhs)
{       this-&gt;laenge=rhs.get_laenge();
        this-&gt;letzte_bearbeitete=rhs.get_letzte_bearbeitete();

        for (int i=0; i&lt;laenge; i++)
        {       this-&gt;glied[i]=rhs.get_glied(i);
        }

        return *this;
}
</code></pre>
<p>Eigenartigerweise ändert sich der Wert von temp_tupel, genauer gesagt die Werte des int-Arrays ändern sich, bei diesem Aufruf:</p>
<pre><code class="language-cpp">summe+=TupelAst(temp_tupel, false);
</code></pre>
<p>Die Funktion sieht wie folgt aus:</p>
<pre><code class="language-cpp">int TupelAst(CTupel temp_tupel, bool grund_ast)
{       int summe=0;
        bool ast_fertig;

        //Falls der akutelle Ast nicht der der grundlegenede ist, Tupel rechts berechnen
        if (!grund_ast) temp_tupel.NaechstesTupelRechts();

        do
        {       summe+=temp_tupel.Produkt();

                if (temp_tupel.NaechstesTupelRechts_pruefen())
                        summe+=TupelAst(temp_tupel, false);

                ast_fertig=!(temp_tupel.NaechstesTupelUnten_pruefen());
                if (!ast_fertig)
                        temp_tupel.NaechstesTupelUnten();
        } while(!ast_fertig);

        return summe;
}
</code></pre>
<p>Da sich wirklich nur der Wert des Arrays ändern, jedoch nicht die der restlichen Werte, habe ich einen Denkfehler beim Kopierkonstruktor vermutet.<br />
Falls doch noch mehr an Infos von Nöten sind:<br />
<a href="http://benediktibk.dyndns.org/data/Tupel_Berechnung/header.zip" rel="nofollow">http://benediktibk.dyndns.org/data/Tupel_Berechnung/header.zip</a></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/216394/kopierkonstruktor-für-ein-member-array</link><generator>RSS for Node</generator><lastBuildDate>Sun, 11 Oct 2026 10:54:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/216394.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Jun 2008 14:45:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Mon, 23 Jun 2008 14:45:41 GMT]]></title><description><![CDATA[<p>Da das eigentliche Problem nichts mit der VCL zu tun hat, habe ich es hier gepostet. Falls falsch, bitte verschieben...</p>
<p>Da ich in der Klasse CTupel ein int-Array verwende, habe ich den Kopierkonstruktor überladen:</p>
<pre><code class="language-cpp">CTupel&amp; CTupel::operator=(CTupel rhs)
{       this-&gt;laenge=rhs.get_laenge();
        this-&gt;letzte_bearbeitete=rhs.get_letzte_bearbeitete();

        for (int i=0; i&lt;laenge; i++)
        {       this-&gt;glied[i]=rhs.get_glied(i);
        }

        return *this;
}
</code></pre>
<p>Eigenartigerweise ändert sich der Wert von temp_tupel, genauer gesagt die Werte des int-Arrays ändern sich, bei diesem Aufruf:</p>
<pre><code class="language-cpp">summe+=TupelAst(temp_tupel, false);
</code></pre>
<p>Die Funktion sieht wie folgt aus:</p>
<pre><code class="language-cpp">int TupelAst(CTupel temp_tupel, bool grund_ast)
{       int summe=0;
        bool ast_fertig;

        //Falls der akutelle Ast nicht der der grundlegenede ist, Tupel rechts berechnen
        if (!grund_ast) temp_tupel.NaechstesTupelRechts();

        do
        {       summe+=temp_tupel.Produkt();

                if (temp_tupel.NaechstesTupelRechts_pruefen())
                        summe+=TupelAst(temp_tupel, false);

                ast_fertig=!(temp_tupel.NaechstesTupelUnten_pruefen());
                if (!ast_fertig)
                        temp_tupel.NaechstesTupelUnten();
        } while(!ast_fertig);

        return summe;
}
</code></pre>
<p>Da sich wirklich nur der Wert des Arrays ändern, jedoch nicht die der restlichen Werte, habe ich einen Denkfehler beim Kopierkonstruktor vermutet.<br />
Falls doch noch mehr an Infos von Nöten sind:<br />
<a href="http://benediktibk.dyndns.org/data/Tupel_Berechnung/header.zip" rel="nofollow">http://benediktibk.dyndns.org/data/Tupel_Berechnung/header.zip</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534213</guid><dc:creator><![CDATA[benediktibk]]></dc:creator><pubDate>Mon, 23 Jun 2008 14:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Mon, 23 Jun 2008 15:01:06 GMT]]></title><description><![CDATA[<p>Das ist kein Copy-ctor sondern ein überladener Zuweisungsoperator (den du auch brauchst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534227</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 23 Jun 2008 15:01:06 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Mon, 23 Jun 2008 15:02:00 GMT]]></title><description><![CDATA[<p>+= ist nicht gleich =.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534228</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 23 Jun 2008 15:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Mon, 23 Jun 2008 15:09:40 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Das hier</p>
<pre><code class="language-cpp">CTupel&amp; CTupel::operator=(CTupel rhs)
</code></pre>
<p>ist nicht der Kopierkonstruktor, sondern der Zuweisungsoperator. Der Kopierkonstruktor würde folgendermaßen aussehen.</p>
<pre><code class="language-cpp">CTupel(const CTupel&amp; rhs)
</code></pre>
<p>Den brauchst du hier. Der könnte etwa so aussehen.</p>
<pre><code class="language-cpp">CTupel(const CTupel&amp; src) : glied(new int[laenge]), laenge(src.laenge), letzte_bearbeitete(src.letzte_bearbeitete) 
{
   for( int i=0; i&lt;laenge; ++i)
       glied[i] = src.glied[i];
}
</code></pre>
<p>Bitte übergib auch immer per konstante Referenz. Bei deinem Zuweisungsoperator hast du deswegen auch eine unnötige Kopie drin.<br />
Beim Zuweisungsoperator musst du übrigens die Länge deines Arrays evtl. neu setzen (löschen, neu machen).<br />
Nimm statt dem Array lieber gleich std::vector (siehe Magazin).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534235</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 23 Jun 2008 15:09:40 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Mon, 23 Jun 2008 15:25:08 GMT]]></title><description><![CDATA[<p>Okay, wieder was dazugelernt. Ich dachte, bei dem obigen Aufruf wird der operator= aufgerufen.</p>
<p>Danke für die schnelle Hilfe!</p>
<p>MfG benediktibk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534246</guid><dc:creator><![CDATA[benediktibk]]></dc:creator><pubDate>Mon, 23 Jun 2008 15:25:08 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Mon, 23 Jun 2008 15:34:19 GMT]]></title><description><![CDATA[<p>Schau auch mal hier<br />
<a href="http://tutorial.schornboeck.net/bigthree.htm" rel="nofollow">http://tutorial.schornboeck.net/bigthree.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534252</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 23 Jun 2008 15:34:19 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Mon, 23 Jun 2008 18:20:05 GMT]]></title><description><![CDATA[<p>Danke für den Link. Solche Theorie sollte einmal in der Schule vorkommen, und nicht &quot;Wie klicke ich mir eine bunte Oberfläche zusammen&quot;.</p>
<p>MfG benediktibk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534343</guid><dc:creator><![CDATA[benediktibk]]></dc:creator><pubDate>Mon, 23 Jun 2008 18:20:05 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Mon, 23 Jun 2008 19:44:51 GMT]]></title><description><![CDATA[<p>benediktibk schrieb:</p>
<blockquote>
<p>Danke für den Link. Solche Theorie sollte einmal in der Schule vorkommen, und nicht &quot;Wie klicke ich mir eine bunte Oberfläche zusammen&quot;.</p>
<p>MfG benediktibk</p>
</blockquote>
<p>Einfach die Threads in diesem Forum verfolgen, dann kommen die meisten wichtigen Sachen relativ schnell zusammen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534405</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 23 Jun 2008 19:44:51 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Mon, 23 Jun 2008 23:56:00 GMT]]></title><description><![CDATA[<p>Warum die Leute immer &quot;this&quot; werwenden kann ihc nicht verstehen.<br />
Ich mag es nicht, denn es nimmt die Übersichtlichkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534505</guid><dc:creator><![CDATA[Quellcode]]></dc:creator><pubDate>Mon, 23 Jun 2008 23:56:00 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Tue, 24 Jun 2008 03:10:17 GMT]]></title><description><![CDATA[<blockquote>
<p>Warum die Leute immer &quot;this&quot; werwenden kann ihc nicht verstehen.<br />
Ich mag es nicht, denn es nimmt die Übersichtlichkeit.</p>
</blockquote>
<p>sieht bunter aus^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534512</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 24 Jun 2008 03:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Tue, 24 Jun 2008 07:24:11 GMT]]></title><description><![CDATA[<p>Quellcode schrieb:</p>
<blockquote>
<p>Warum die Leute immer &quot;this&quot; werwenden kann ihc nicht verstehen.<br />
Ich mag es nicht, denn es nimmt die Übersichtlichkeit.</p>
</blockquote>
<p>Ich kann dir gleich mehrere Gründe für this geben:<br />
a) In manchen IDE's funktioniert die Codevervollständigung mit this einfach besser.<br />
b) Wenn man gleiche Variablennamen für Member und Parameter verwendet ist this nötig (und irgendein kryptisches Präfix wie m_ halte ich für weniger Aussagekräftig wie ein this-&gt;)...</p>
<p>Jeder wie es mag, ich ziehe die this-&gt; schreibweise jedenfalls vor. Und Übersichtlichkeit geht mir dabei eigentlich nicht verloren, liefert es doch auch Zusatzinformationen (okay, wenn man wirklich immer kurze Methoden schreibt die man auf einen Bildschirm überblicken kann, ist es nicht zwangsweise nötig).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534553</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534553</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 24 Jun 2008 07:24:11 GMT</pubDate></item><item><title><![CDATA[Reply to Kopierkonstruktor für ein Member-Array on Tue, 24 Jun 2008 08:54:47 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich verwende this auch nur sehr selten ... aber irgendwie würde es mir schwer fallen, da eine generelle Regel aufzustellen. Einerseits kann es bei vielen Parametern und klassischen &quot;Settern&quot; IMHO Übersichtlichkeit erhöhen</p>
<pre><code class="language-cpp">// ich finde .....
void neueWerte(int groesse, int breite, int laenge, ... ) {
   this-&gt;groesse = groesse;
   this-&gt;breite = breite;
   this-&gt;laenge = laenge;
   ...
}

// ... klarer als:
void neueWerte(int in_groesse, int in_breite, int in_laenge, ... ) {
   groesse = in_groesse;
   breite = in_breite;
   laenge = in_laenge;
   ...
}
</code></pre>
<p>Aber wenn man eine ziemlich komplexe Memberfunktion hat, gehen einem die &quot;this&quot;-e auch ziemlich schnell &quot;auf die Augen&quot;</p>
<pre><code class="language-cpp">// ohne this ...
void berechne() {
   groesse = gefundenesFressen &lt; wasImmer ? 
      breite * sqrt(breite2) + merkmal.getVal(actPos) &gt; 0 :
      andererWert[neuePos].naechstes().second-&gt;val(actPos);
}

// ... oder mit:
void berechne() {
   this-&gt;groesse = this-&gt;gefundenesFressen &lt; this-&gt;wasImmer ? 
      this-&gt;breite * sqrt(this-&gt;breite) + this-&gt;merkmal.getVal(this-&gt;actPos) &gt; 0 :
      this-&gt;andererWert[this-&gt;neuePos].naechstes().second-&gt;val(this-&gt;actPos);
}
</code></pre>
<p>Wie so oft: Es kommt drauf an.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1534598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1534598</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 24 Jun 2008 08:54:47 GMT</pubDate></item></channel></rss>