<?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[Vererbungsproblem]]></title><description><![CDATA[<p>Hallo zusammen! <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="🙂"
    /><br />
Ich bin noch ziemlich neu in der C++-Welt und habe eine hoffentlich nicht zu dumme Frage zur Vererbung, die für mich unter Neuland fällt. Aber obwohl ich jetzt gefühlt tausende Beispiele dazu gewälzt habe, komme ich hier einfach nicht weiter. Vielleicht sehe ich mittlerweile auch nur den Wald vor lauter Bäumen nicht mehr.</p>
<p>Ich habe eine Klasse A</p>
<pre><code>class A
{
  Attribut m_1;
  Attribut m_2;   
}
</code></pre>
<p>Dann habe ich eine Klasse B, die von Klasse A erbt</p>
<pre><code>class B : A
{   
    A::Attribut m_1;
    A::Attribut m_2;
    Attribut m_3;     
}
</code></pre>
<p>So weit kein Problem.</p>
<p>Dann habe ich eine Menge Klassen C bis … n, die alle von B erben.</p>
<pre><code>class C : B
{
           A::Attribut m_1;
           A::Attribut m_2;
           B::Attribut m_3;  
           Attribut m_4; 
}
</code></pre>
<p>Ob das Konstrukt guter Programmcode ist, kann ich nicht beurteilen. Es funktioniert bis jetzt jedenfalls reibungslos.</p>
<p>Jetzt habe ich aber eine Stelle, an der ich partout nicht weiterkomme.</p>
<p>Ich habe eine Instanz der Klasse B, nennen wir sie mal MyClassB.<br />
Und ich habe eine Instanz der Klasse C, nennen wir sie mal MyClassC.<br />
Sie sind von zwei unterschiedlichen Instanzen der Klasse A abgeleitet, also die Attribute m_1 und m_2 sind in myClassC und MyClassB nicht identisch.</p>
<p><strong>Jetzt möchte ich die Attribute m_1 und m_2, die MyClassC von &quot;seinem&quot; A geerbt hat, der Instanz MyClassB zuweisen und damit überschreiben, was B ursprünglich von &quot;seinem&quot; A geerbt hat.</strong></p>
<p>Ich kann das natürlich einzeln machen, also</p>
<pre><code>MyClassB.A::m_1 = MyClassC.A.::m_1;
</code></pre>
<p>Das klappt zwar, hat aber den Nachteil, dass ich das für jedes einzelne Attribut bei jeder Klasse, die von B abgeleitet ist, erneut machen muss. Das sind ja einige, und es ist letztendlich immer dasselbe, da es ja dieselbe Basisklasse ist. Das ist vermutlich nicht die Lösung, wie man so etwas macht?</p>
<p>Ich hatte die wahrscheinlich naive Erwartung, ich könnte einfach</p>
<pre><code>MyClassB.A = MyClassC.A
</code></pre>
<p>schreiben. Aber hier streikt der Compiler, und der denkt sich vermutlich etwas dabei. <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>
<p>Ich habe es mittlerweile mit einigen Mitteln und seit einigen Stunden erfolglos versucht, das zuzuweisen.<br />
Ich hoffe, ich habe keinen kolossalen Denkfehler bei der Vererbung. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Könnt ihr mir einen Tipp geben, was ich falsch mache?<br />
Schon mal vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/339531/vererbungsproblem</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 00:55:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/339531.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Sep 2016 21:31:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbungsproblem on Tue, 06 Sep 2016 21:31:46 GMT]]></title><description><![CDATA[<p>Hallo zusammen! <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="🙂"
    /><br />
Ich bin noch ziemlich neu in der C++-Welt und habe eine hoffentlich nicht zu dumme Frage zur Vererbung, die für mich unter Neuland fällt. Aber obwohl ich jetzt gefühlt tausende Beispiele dazu gewälzt habe, komme ich hier einfach nicht weiter. Vielleicht sehe ich mittlerweile auch nur den Wald vor lauter Bäumen nicht mehr.</p>
<p>Ich habe eine Klasse A</p>
<pre><code>class A
{
  Attribut m_1;
  Attribut m_2;   
}
</code></pre>
<p>Dann habe ich eine Klasse B, die von Klasse A erbt</p>
<pre><code>class B : A
{   
    A::Attribut m_1;
    A::Attribut m_2;
    Attribut m_3;     
}
</code></pre>
<p>So weit kein Problem.</p>
<p>Dann habe ich eine Menge Klassen C bis … n, die alle von B erben.</p>
<pre><code>class C : B
{
           A::Attribut m_1;
           A::Attribut m_2;
           B::Attribut m_3;  
           Attribut m_4; 
}
</code></pre>
<p>Ob das Konstrukt guter Programmcode ist, kann ich nicht beurteilen. Es funktioniert bis jetzt jedenfalls reibungslos.</p>
<p>Jetzt habe ich aber eine Stelle, an der ich partout nicht weiterkomme.</p>
<p>Ich habe eine Instanz der Klasse B, nennen wir sie mal MyClassB.<br />
Und ich habe eine Instanz der Klasse C, nennen wir sie mal MyClassC.<br />
Sie sind von zwei unterschiedlichen Instanzen der Klasse A abgeleitet, also die Attribute m_1 und m_2 sind in myClassC und MyClassB nicht identisch.</p>
<p><strong>Jetzt möchte ich die Attribute m_1 und m_2, die MyClassC von &quot;seinem&quot; A geerbt hat, der Instanz MyClassB zuweisen und damit überschreiben, was B ursprünglich von &quot;seinem&quot; A geerbt hat.</strong></p>
<p>Ich kann das natürlich einzeln machen, also</p>
<pre><code>MyClassB.A::m_1 = MyClassC.A.::m_1;
</code></pre>
<p>Das klappt zwar, hat aber den Nachteil, dass ich das für jedes einzelne Attribut bei jeder Klasse, die von B abgeleitet ist, erneut machen muss. Das sind ja einige, und es ist letztendlich immer dasselbe, da es ja dieselbe Basisklasse ist. Das ist vermutlich nicht die Lösung, wie man so etwas macht?</p>
<p>Ich hatte die wahrscheinlich naive Erwartung, ich könnte einfach</p>
<pre><code>MyClassB.A = MyClassC.A
</code></pre>
<p>schreiben. Aber hier streikt der Compiler, und der denkt sich vermutlich etwas dabei. <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>
<p>Ich habe es mittlerweile mit einigen Mitteln und seit einigen Stunden erfolglos versucht, das zuzuweisen.<br />
Ich hoffe, ich habe keinen kolossalen Denkfehler bei der Vererbung. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Könnt ihr mir einen Tipp geben, was ich falsch mache?<br />
Schon mal vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507786</guid><dc:creator><![CDATA[Mirabella]]></dc:creator><pubDate>Tue, 06 Sep 2016 21:31:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Wed, 07 Sep 2016 00:01:23 GMT]]></title><description><![CDATA[<p>Hört sich nach einem ziemlichen durcheinander bei dir an. Ich würde, wenn die Klassen sich sowieso ähneln, ein Interface implementieren und mit Polymorphie arbeiten. Vielleicht geht das was du vorhast, aber das könnte man eventuell auch anders lösen, in dem du dir noch mal Gedanken über deine Klasse machst. In einem Interface werden zB virtuelle Methoden benutzt die du dann überschreiben musst.</p>
<p>Um das Problem zu lösen würde ich mir nochmal über deine Vererbung Gedanken machen. Hab hier mal gelesen, dass so eine wirre Vererbung nicht so gut sein soll. Hängt auch vielleicht davon ab was die Klassen machen sollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507787</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 07 Sep 2016 00:01:23 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Wed, 07 Sep 2016 01:09:00 GMT]]></title><description><![CDATA[<p>@Mirabella<br />
Ich gehe mal davon aus dass dein Beispielcode nicht dem Code entspricht den du wirklich hast, sondern Quatsch ist.<br />
Also dass die Zeilen<br />
<code>A::Attribut m_1;</code><br />
<code>A::Attribut m_2;</code><br />
etc. bloss beschreiben sollen dass es in B und C jeweils von A geerbte Member <code>m_1</code> und <code>m_2</code> gibt.</p>
<p>In dem Fall würde ich sagen, was du suchst ist die Möglichkeit eine Zuweisung ala</p>
<pre><code class="language-cpp">ASubObjectOfMyClassB = ASubObjectOfMyClassC; // &quot;A&quot; nicht im Sinne von &quot;ein&quot; sondern im Sinne von &quot;class A&quot;
</code></pre>
<p>zu machen.</p>
<p>Und das geht so:</p>
<pre><code class="language-cpp">A&amp; ASubObjectOfMyClassB = ClassB;
A&amp; ASubObjectOfMyClassC = ClassC;
ASubObjectOfMyClassB = ASubObjectOfMyClassC;
</code></pre>
<p>Tadaa.</p>
<p>Dabei ist <code>ASubObjectOfMyClassB</code> einfach ein Verweis (eine Referenz) auf das geerbte A Subobjekt des Objekts <code>ClassB</code> , und <code>ASubObjectOfMyClassC</code> ein Verweis (eine Referenz) auf das geerbte A Subobjekt des Objekts <code>ClassC</code> .<br />
Da <code>ASubObjectOfMyClassB</code> bzw. <code>ASubObjectOfMyClassC</code> lediglich Referenzen auf A Objekte sind werden dabei auch nur die Member von A zugewiesen. Dass die beiden A Objekte in ein B bzw. C Objekt &quot;eingebettet&quot; sind spielt dabei keine Rolle.</p>
<p>Das ganze kann man dann noch vereinfachen. <code>ClassC</code> ist ein C Objekt, und jedes C Objekt &quot;ist&quot; auch ein A Objekt, d.h. die Konvertierung in eine Referenz auf ein A Objekt ist implizit möglich. D.h. du kannst einfach schreiben</p>
<pre><code class="language-cpp">A&amp; ASubObjectOfMyClassB = ClassB;
ASubObjectOfMyClassB = ClassC;
</code></pre>
<p>Reicht.</p>
<p>Bzw. man kann es sogar in einer Zeile schreiben:</p>
<pre><code class="language-cpp">static_cast&lt;A&amp;&gt;(ClassB) = ClassC;
</code></pre>
<p>ps: Die Benamsung deiner Variablen ist sehr verwirrend. <code>MyClassB</code> ist ein Bezeichner den man eher mit einer Klasse assoziieren würde, du verwendest ihn aber für ein Objekt. Wenn schon mit &quot;my&quot;, dann würde ich eher sowas wie <code>MyBObject</code> verwenden. Oder einfach nur <code>MyB</code> . Oder noch besser <code>myB</code> -- gleiches Benamsungsschema für Klassen und Objekte ist nämlich auch verwirrend. Oder auch gleich ganz ohne &quot;my&quot;, dann vielleicht einfach <code>someB</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507788</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 07 Sep 2016 01:09:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Wed, 07 Sep 2016 01:07:04 GMT]]></title><description><![CDATA[<p>@Bennisen<br />
Macht nicht den Eindruck als ob du die Frage verstanden hättest.<br />
Wieso beantwortest du sie dann?<br />
Das hilft doch niemandem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507789</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 07 Sep 2016 01:07:04 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Wed, 07 Sep 2016 17:09:40 GMT]]></title><description><![CDATA[<blockquote>
<p>@Mirabella<br />
Ich gehe mal davon aus dass dein Beispielcode nicht dem Code entspricht den du wirklich hast, sondern Quatsch ist.<br />
Also dass die Zeilen<br />
A::Attribut m_1;<br />
A::Attribut m_2;<br />
etc. bloss beschreiben sollen dass es in B und C jeweils von A geerbte Member m_1 und m_2 gibt.</p>
</blockquote>
<p>Ganz genau! Das hatte ich gedankenlos von meinen persönlichen Notizen übernommen, ich wollte mir damit selbst verdeutlichen, dass die Attribute vererbt und damit &quot;auch da&quot; sind.</p>
<pre><code>static_cast&lt;A&amp;&gt;(ClassB) = ClassC;
</code></pre>
<p>Vielen, vielen, vielen Dank! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Das hat mein Problem schlagartig gelöst!!!! <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="🙂"
    /><br />
Da wäre ich echt niemals draufgekommen, ich merke, ich muss noch viel über C++ lernen. <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>
<blockquote>
<p>ps: Die Benamsung deiner Variablen ist sehr verwirrend. MyClassB ist ein Bezeichner den man eher mit einer Klasse assoziieren würde, du verwendest ihn aber für ein Objekt. Wenn schon mit &quot;my&quot;, dann würde ich eher sowas wie MyBObject verwenden. Oder einfach nur MyB. Oder noch besser myB -- gleiches Benamsungsschema für Klassen und Objekte ist nämlich auch verwirrend. Oder auch gleich ganz ohne &quot;my&quot;, dann vielleicht einfach someB.</p>
</blockquote>
<p>Sorry und danke für den Hinweis! Ich habe extra my... genommen, weil ich dachte, das wäre die gängige Konvention für Objekte. <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="🙂"
    /> Ich mag das selbst nicht wirklich. someB habe ich noch nie gesehen, gefällt mir aber wesentlich besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507868</guid><dc:creator><![CDATA[Mirabella]]></dc:creator><pubDate>Wed, 07 Sep 2016 17:09:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsproblem on Thu, 08 Sep 2016 03:12:37 GMT]]></title><description><![CDATA[<p>Bitte bitte <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>
<p>BTW: Mir fällt auf dass ich das &quot;My&quot; in &quot;MyClassX&quot; unterschlagen habe, und statt dessen nur &quot;ClassX&quot; geschrieben. Das war keine Absicht. Hoffe es war nicht verwirrend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507922</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 08 Sep 2016 03:12:37 GMT</pubDate></item></channel></rss>