<?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[Optimierung bei Wertzuweisung von geerbter Klasse]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe eine ganze reihe Klassen, die jeweils voneinander erben ...</p>
<p>jede Klasse bringt weitere Variablen mit ...</p>
<p>jetzt zu meiner Frage:<br />
<strong>Kann man in der geerbten Klasse alle Variablen der Basisklasse setzen?</strong></p>
<p>... beim Konstruktor geht das ja mit einer Initialisierungsliste</p>
<p>aber z.B. beim <strong>operator=</strong> wie funktioniert das dort?<br />
Es werden nämlich immer mehr Sachen die initialisiert werden müssen und dann muss ich in der geerbten Klasse immer mehr schreiben ...</p>
<p>... ein bisschen Code dazu:</p>
<pre><code class="language-cpp">class A {
    public:
        A();
        A(int x) : x(x){};
        virtual ~A();

    public:
        int x;

    public:
        A operator=(const A &amp;a){
            this-&gt;x = a.x;
        }

        A operator=(int x){
            this-&gt;x = x;
            return *this;
        }
}
</code></pre>
<pre><code class="language-cpp">class B : public A {
    public:
        B();
        B(int x, int y) : A(x), y(y){};
        virtual ~B();

    public:
        int y;

    public:
        B operator=(const B &amp;b){
            this-&gt;x = b.x; //einmal hier
            this-&gt;y = b.y;
            return *this;
        }
}
</code></pre>
<pre><code class="language-cpp">class C : public B {
    ....
    public:
        C operator=(const C &amp;c){
            this-&gt;x = c.x; //hier
            this-&gt;y = c.y; //und hier
            this-&gt;z = z.z;
            return *this;
        }
}
</code></pre>
<p>Bei den Zeilen mit Kommentar liegt mein Problem.</p>
<p>Gibt es da irgendeine Möglichkeit das irgendwie zuzuweisen?</p>
<p>... Vorschlägen und Angregungen stehe ich offen gegenüber ...</p>
<p>Gruß Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/249013/optimierung-bei-wertzuweisung-von-geerbter-klasse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 16:29:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/249013.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Sep 2009 15:14:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Optimierung bei Wertzuweisung von geerbter Klasse on Tue, 01 Sep 2009 15:14:28 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe eine ganze reihe Klassen, die jeweils voneinander erben ...</p>
<p>jede Klasse bringt weitere Variablen mit ...</p>
<p>jetzt zu meiner Frage:<br />
<strong>Kann man in der geerbten Klasse alle Variablen der Basisklasse setzen?</strong></p>
<p>... beim Konstruktor geht das ja mit einer Initialisierungsliste</p>
<p>aber z.B. beim <strong>operator=</strong> wie funktioniert das dort?<br />
Es werden nämlich immer mehr Sachen die initialisiert werden müssen und dann muss ich in der geerbten Klasse immer mehr schreiben ...</p>
<p>... ein bisschen Code dazu:</p>
<pre><code class="language-cpp">class A {
    public:
        A();
        A(int x) : x(x){};
        virtual ~A();

    public:
        int x;

    public:
        A operator=(const A &amp;a){
            this-&gt;x = a.x;
        }

        A operator=(int x){
            this-&gt;x = x;
            return *this;
        }
}
</code></pre>
<pre><code class="language-cpp">class B : public A {
    public:
        B();
        B(int x, int y) : A(x), y(y){};
        virtual ~B();

    public:
        int y;

    public:
        B operator=(const B &amp;b){
            this-&gt;x = b.x; //einmal hier
            this-&gt;y = b.y;
            return *this;
        }
}
</code></pre>
<pre><code class="language-cpp">class C : public B {
    ....
    public:
        C operator=(const C &amp;c){
            this-&gt;x = c.x; //hier
            this-&gt;y = c.y; //und hier
            this-&gt;z = z.z;
            return *this;
        }
}
</code></pre>
<p>Bei den Zeilen mit Kommentar liegt mein Problem.</p>
<p>Gibt es da irgendeine Möglichkeit das irgendwie zuzuweisen?</p>
<p>... Vorschlägen und Angregungen stehe ich offen gegenüber ...</p>
<p>Gruß Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770396</guid><dc:creator><![CDATA[varginator]]></dc:creator><pubDate>Tue, 01 Sep 2009 15:14:28 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierung bei Wertzuweisung von geerbter Klasse on Tue, 01 Sep 2009 15:34:04 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">C&amp; C::operator=(const C &amp;c){
            B::operator=(c); // static_cast&lt;B&amp;&gt;(*this)=c;
            this-&gt;z = z.z;
            return *this;
        }
</code></pre>
<p>und analog in B - so geht der compilergenerierte Zuweisungoperator vor. Wenn deiner also diese Form hat, kannst du genausogut darauf verzichten, ebenso wie beim Copyctor. Zu beachten ist zudem, dass diese Implementierung nicht exceptionsicher ist, wenn irgendeine außer der ersten Zuweisung fehlschlägt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770401</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 01 Sep 2009 15:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierung bei Wertzuweisung von geerbter Klasse on Wed, 02 Sep 2009 06:13:31 GMT]]></title><description><![CDATA[<p>Vielen dank für deine Antwort,</p>
<p>also werde ich in Zukunft den +-Operator wohl automatisch erstellen lassen, wenn ich nichts besonderes brauch ...</p>
<p>... wird der Operator immer generiert, wenn er nicht definiert ist, oder wird er nichtmehr generiert sobald ich z.B. nen anderen +-Operator (z.B. mit einem int) geschrieben hab?</p>
<p>Gruß Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770669</guid><dc:creator><![CDATA[varginator]]></dc:creator><pubDate>Wed, 02 Sep 2009 06:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierung bei Wertzuweisung von geerbter Klasse on Wed, 02 Sep 2009 06:19:16 GMT]]></title><description><![CDATA[<p>varginator schrieb:</p>
<blockquote>
<p>also werde ich in Zukunft den +-Operator wohl automatisch erstellen lassen, wenn ich nichts besonderes brauch ...</p>
</blockquote>
<p>Das wird nicht gehen. Die einzigen Funktionen die der Compiler automatisch generiert (wenn du sie nicht selber deklarierst) sind folgende:</p>
<p>- Copy-Ctor<br />
- operator=<br />
- Dtor<br />
- Default-Ctor (wird nicht mehr generiert, wenn du <em>irgendeinen</em> anderen Ctor deklarierst)</p>
<p>Alle weiteren, also auch deinen operator+, wirst du selber schreiben müssen.<br />
Zur Operatorüberladung siehe auch meinen <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-200753.html" rel="nofollow">allgemeinen Artikel</a> sowie den <a href="http://magazin.c-plusplus.net/artikel/%DCberladung%20von%20Operatoren%20in%20CPlusPlus%20%28Teil%202%29%20-%20Einf%FChrung%20in%20boost%3A%3Aoperators" rel="nofollow">Artikel über boost::operators</a> (die Bibliothek kann dir ne Menge Arbeit abnehmen bei den Operatoren).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770671</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 02 Sep 2009 06:19:16 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierung bei Wertzuweisung von geerbter Klasse on Wed, 02 Sep 2009 06:30:03 GMT]]></title><description><![CDATA[<p>Üblicherweise benutzt man keine (public) Vererbung, wenn man Klassen erstellt, die ähnlich wie ints benutzbar werden sollen (bzgl operator=, operator+, ...).</p>
<p>Vererbung wird von Neulingen oft missbraucht.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770675</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 02 Sep 2009 06:30:03 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierung bei Wertzuweisung von geerbter Klasse on Wed, 02 Sep 2009 07:08:15 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>: Oh, entschuldigung, ich meinte auch eigentlich den =-Operator, mir ist klar das ich den +-Operator selbst schreiben muss, denn der Compiler weiß ja nicht, was ich genau vor habe ...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/36159">@Sebastian</a>: Das ist mir klar, ich hab nur ein Minimalbeispiel gebracht, das mein Problem in etwa beschreibt ...</p>
<p>Trotzdem bedanke ich mich für die Antworten und entschuldige mich für die Unannehmlichkeiten die ich verursacht habe.</p>
<p>Gruß Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770690</guid><dc:creator><![CDATA[varginator]]></dc:creator><pubDate>Wed, 02 Sep 2009 07:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierung bei Wertzuweisung von geerbter Klasse on Wed, 02 Sep 2009 12:43:18 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Die einzigen Funktionen die der Compiler automatisch generiert (wenn du sie nicht selber deklarierst) sind folgende:</p>
<p>- Copy-Ctor<br />
- operator=<br />
- Dtor<br />
- Default-Ctor (wird nicht mehr generiert, wenn du <em>irgendeinen</em> anderen Ctor deklarierst).</p>
</blockquote>
<p>Zusätzlich noch der Adressoperator.</p>
<p>Der Kommaoperator ist auch ohne eigene Überladung anwendbar, aber den würde ich nicht dazu zählen, weil er ja nicht wirklich zur Klasse gehört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770880</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 02 Sep 2009 12:43:18 GMT</pubDate></item><item><title><![CDATA[Reply to Optimierung bei Wertzuweisung von geerbter Klasse on Wed, 02 Sep 2009 14:17:00 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Die einzigen Funktionen die der Compiler automatisch generiert (wenn du sie nicht selber deklarierst) sind folgende:</p>
<p>- Copy-Ctor<br />
- operator=<br />
- Dtor<br />
- Default-Ctor (wird nicht mehr generiert, wenn du <em>irgendeinen</em> anderen Ctor deklarierst).</p>
</blockquote>
<p>Zusätzlich noch der Adressoperator.</p>
</blockquote>
<p>Ein überladener Adressoperator wird vom Compiler nicht automatisch generiert. Zudem muss dieser ohnehin nicht als Memberfunktion überladen werden - somit stellte sich die Frage, wann der Compiler entscheiden müsste, ob er diesen Operator selbst generiert oder nicht.</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Der Kommaoperator ist auch ohne eigene Überladung anwendbar, aber den würde ich nicht dazu zählen, weil er ja nicht wirklich zur Klasse gehört.</p>
</blockquote>
<p>Das hängt davon ab, wie man &quot;zur Klasse gehören&quot; auffasst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1770954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1770954</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 02 Sep 2009 14:17:00 GMT</pubDate></item></channel></rss>