<?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[Vererbung]]></title><description><![CDATA[<p>ich habe folgendes Kontrukt:<br />
eine klasse basis</p>
<p>eine davon abgeleitete klasse kind</p>
<p>die klasse kind soll nun eine method foo() haben, die in der basis noch nicht vorhanden war</p>
<p>nun existiert ein vector&lt;basis*&gt;</p>
<p>in den basen und kinder reingesteckt werden können</p>
<p>wie kann ich nun aber die funktion foo() aufrufen?<br />
und wie kann ich sichergehen dass beim abruf auch tatsächlich die methode foo() existiert?</p>
<p>ich möchte eigentlich keine abstrakte basisklasse entickeln, die alle funktionen irgendwie beinhaltet</p>
<p>später muss es nämlich noch andere kinder_i geben, die zwar auch im prinzip von basis abstammen aber nichts untereinander gemeinsam haben</p>
<p>ist vlt die wahl von vector schlecht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/233250/vererbung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 01:09:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/233250.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Feb 2009 16:41:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbung on Mon, 02 Feb 2009 16:41:00 GMT]]></title><description><![CDATA[<p>ich habe folgendes Kontrukt:<br />
eine klasse basis</p>
<p>eine davon abgeleitete klasse kind</p>
<p>die klasse kind soll nun eine method foo() haben, die in der basis noch nicht vorhanden war</p>
<p>nun existiert ein vector&lt;basis*&gt;</p>
<p>in den basen und kinder reingesteckt werden können</p>
<p>wie kann ich nun aber die funktion foo() aufrufen?<br />
und wie kann ich sichergehen dass beim abruf auch tatsächlich die methode foo() existiert?</p>
<p>ich möchte eigentlich keine abstrakte basisklasse entickeln, die alle funktionen irgendwie beinhaltet</p>
<p>später muss es nämlich noch andere kinder_i geben, die zwar auch im prinzip von basis abstammen aber nichts untereinander gemeinsam haben</p>
<p>ist vlt die wahl von vector schlecht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656663</guid><dc:creator><![CDATA[-anfänger]]></dc:creator><pubDate>Mon, 02 Feb 2009 16:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Mon, 02 Feb 2009 16:46:25 GMT]]></title><description><![CDATA[<p>Warum soll basis diese Funktion (abstrakt) denn nicht enthalten?<br />
Du kannst zwar theoretisch mittels dynamic_cast basis* auf kind* casten und durch Überprüfung des Zeigers testen ob das alles funktioniert. Das widerspricht aber etwas dem Sinn der Polymorphie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656667</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 02 Feb 2009 16:46:25 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Mon, 02 Feb 2009 16:47:00 GMT]]></title><description><![CDATA[<p>-anfänger schrieb:</p>
<blockquote>
<p>ist vlt die wahl von vector schlecht?</p>
</blockquote>
<p>Nein, was schlecht ist, ist das Vererbungsdesign. Wenn du polymorphes Verhalten willst, besteht zwischen den Klassen eine Verhält-Sich-Genau-Wie-Ein-Beziehung. Die üblich genannt Ist-Ein-Beziehung, ist etwas irreführend, da sich viele Ist-Ein-Beziehungen nicht gut übertragen lassen (Ein Quadrat ist ein Rechteck, trotzdem ist es meist nicht sinnvoll eine Quadrat-Klasse von einer Rechteckklasse erben zu lassen).</p>
<p>Da du anscheinend auf zwei unterschiedlichen Klassen arbeitest, solltest du auch zwei Vektoren anlegen. Dann kannst du die spezifischen Funktionen sicher aufrufen.</p>
<p>Gruß<br />
Don06</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656669</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Mon, 02 Feb 2009 16:47:00 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Mon, 02 Feb 2009 16:51:28 GMT]]></title><description><![CDATA[<p>-anfänger schrieb:</p>
<blockquote>
<p>später muss es nämlich noch andere kinder_i geben, die zwar auch im prinzip von basis abstammen aber nichts untereinander gemeinsam haben</p>
</blockquote>
<p>Sicher dass vererbung dann der richtige Weg ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656673</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 02 Feb 2009 16:51:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Mon, 02 Feb 2009 17:20:40 GMT]]></title><description><![CDATA[<p>-anfänger schrieb:</p>
<blockquote>
<p>ich habe folgendes Kontrukt:<br />
eine klasse basis</p>
<p>eine davon abgeleitete klasse kind</p>
</blockquote>
<p>Vererbung sollte nur bei IST-EIN Beziehungen gewählt werden. Basisklassen machen zudem nur Sinn, wenn die abgeleiteten Klassen Gemeinsamkeiten haben.</p>
<p>Deine Beschreibung deutet eher darauf das deine abgeleiteten Klassen vermutlich kaum Ähnlichkeiten haben. Wenn man Container mit Zeigern der Basisklasse verwendet, sollte der Regelfall sein, das man auf eine gemeinsame Schnittstelle zugreift. Wenn der Regelfall aber ist, das man spezifische Methoden aufruft, liegt hier ein Designfehler vor.</p>
<p>Sollte es nicht die Regel, sondern die Ausnahme sein, hilft dir dynamic_cast weiter. Da dynamic_cast aber nicht sonderlich schnell ist, sollte dies wie gesagt eine Ausnahme darstellen...</p>
<pre><code class="language-cpp">Kind * kind = dynamic_cast&lt;Kind*&gt;(basis);
if(kind) {
    // Cast war erfolgreich, basis war ein Kind...
}
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656699</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 02 Feb 2009 17:20:40 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Mon, 02 Feb 2009 17:23:19 GMT]]></title><description><![CDATA[<p>ich muss irgendwie in der lage sein alle kinder und basen zu durchlaufen , weiterhin müssen diese alle auf sich zugreifen können</p>
<p>wäre in einem vector und einem iterator sache von einer for-schleife</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656700</guid><dc:creator><![CDATA[~anfänger]]></dc:creator><pubDate>Mon, 02 Feb 2009 17:23:19 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Mon, 02 Feb 2009 17:30:27 GMT]]></title><description><![CDATA[<p>Wieso speicherst du <code>kind</code> - und <code>basis</code> -Instanzen nicht in zwei separaten Containern?</p>
<p>Die gemeinsame Verwaltung in einem Container macht nur Sinn, wenn die Funktionalität ähnlich ist und beispielsweise virtuelle Funktionen aufgerufen werden. Wenn man jedes Mal mittels <code>dynamic_cast</code> unterscheiden muss, um welche Klasse es sich handelt, hat man etwas falsch gemacht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656712</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 02 Feb 2009 17:30:27 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbung on Mon, 02 Feb 2009 18:55:25 GMT]]></title><description><![CDATA[<p>~anfänger schrieb:</p>
<blockquote>
<p>ich muss irgendwie in der lage sein alle kinder und basen zu durchlaufen , weiterhin müssen diese alle auf sich zugreifen können</p>
<p>wäre in einem vector und einem iterator sache von einer for-schleife</p>
</blockquote>
<p>Vielleicht beschreibst du mal näher um was es geht, damit wir dir vielleicht bessere Alternativen nennen können. Es hört sich bislang nach einem Fehldesign an, und vielleicht hat ja der ein oder andere eine bessere Lösung für dich parat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1656776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1656776</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 02 Feb 2009 18:55:25 GMT</pubDate></item></channel></rss>