<?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[Problem mit Vererbung und Polymorphie]]></title><description><![CDATA[<p>Gegeben folgender Klassenstammbaum:</p>
<pre><code>S   T
  / \ /
 P   N
</code></pre>
<p>Ich will nun folgendes realisieren:</p>
<ol>
<li>Suche in einem ptr_vector&lt;S&gt; mit max_element nach dem größten Element. Dabei sollen nur solche Elemente aus dem vector untersucht werden, die ein N und damit ein T sind. Das größte Element soll als T angegeben werden.</li>
<li>Suche nun alle Vorkommnisse von dem größten Elemten im vector, wieder nur unter den N's.</li>
</ol>
<p>Kann man das sinnvoll ohne RTTI realisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/277509/problem-mit-vererbung-und-polymorphie</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 20:10:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277509.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Nov 2010 16:48:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Fri, 19 Nov 2010 16:48:13 GMT]]></title><description><![CDATA[<p>Gegeben folgender Klassenstammbaum:</p>
<pre><code>S   T
  / \ /
 P   N
</code></pre>
<p>Ich will nun folgendes realisieren:</p>
<ol>
<li>Suche in einem ptr_vector&lt;S&gt; mit max_element nach dem größten Element. Dabei sollen nur solche Elemente aus dem vector untersucht werden, die ein N und damit ein T sind. Das größte Element soll als T angegeben werden.</li>
<li>Suche nun alle Vorkommnisse von dem größten Elemten im vector, wieder nur unter den N's.</li>
</ol>
<p>Kann man das sinnvoll ohne RTTI realisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1982973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1982973</guid><dc:creator><![CDATA[ich bins]]></dc:creator><pubDate>Fri, 19 Nov 2010 16:48:13 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Fri, 19 Nov 2010 16:56:17 GMT]]></title><description><![CDATA[<p>ich bins schrieb:</p>
<blockquote>
<p>Kann man das sinnvoll ohne RTTI realisieren?</p>
</blockquote>
<p>Du willst zur Laufzeit einen Typ Identifizieren - dh du brauchst eine Laufzeit Typ Identifizierung (Runtime Type Identification). Also nein.</p>
<p>Du kannst aber zB garnicht erst die Typen mischen die nicht gemischt werden sollen... Oder natürlich jedem Typen eine ID mitgeben und die abfragen.</p>
<p>idR zeigt dies einen Designfehler an wenn man sowas braucht - nicht immer, ist aber ein guter Indiz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1982975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1982975</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 19 Nov 2010 16:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Fri, 19 Nov 2010 16:57:29 GMT]]></title><description><![CDATA[<p>Ohne RTTI heisst meist mit virtuellen Funktionen. Mir schwebt da eine Methode vor, die einen für die Ordnung relevanten Wert zurückgibt.</p>
<pre><code class="language-cpp">virtual int S::GetValue() const = 0;
</code></pre>
<p>Dabei kannst du die Implementierungen in <code>P</code> so schreiben, dass ein sicher kleinerer Wert als unter <code>N</code> herauskommt.</p>
<pre><code class="language-cpp">virtual int P::GetValue()
{
    return -1; // Falls N::GetValue() immer ints &gt;= 0 zurückgibt.
}
</code></pre>
<p>Die virtuelle Funktion <code>GetValue()</code> wird dann von <code>std::max_element()</code> aufgerufen, um das Maximum zu finden. Schau dir dazu den dritten Parameter des STL-Algorithms an.</p>
<p>Allerdings ist <code>std::max_element()</code> etwas ungeeignet, da es dir nur ein Maximum zurückgibt, und nicht alle Vorkommen. So musst du den Container mehrmals durchlaufen, zusätzlich mit <code>std::find()</code> . Die Alternative wäre, selbst eine Maximumsfunktion zu schreiben, die Indizes/Zeiger/Iteratoren auf alle maximalen Elemente in einem <code>std::vector</code> speichert und diesen zurückgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1982977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1982977</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 19 Nov 2010 16:57:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Fri, 19 Nov 2010 16:59:02 GMT]]></title><description><![CDATA[<p>Mir ging auch so etwas, wie bei Nexus durch den Kopf, aber sonst stimme ich Shade zu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1982978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1982978</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 19 Nov 2010 16:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Fri, 19 Nov 2010 17:01:27 GMT]]></title><description><![CDATA[<p>Ich sage mal genauer, worum es geht: Ich schreibe ein Musikprogramm:</p>
<pre><code>Satzzeichen   Tonhoehe
      /    \ /
   Pause   Note
</code></pre>
<p>Und ich definiere</p>
<pre><code class="language-cpp">typedef boost::ptr_vector&lt;Satzzeichen&gt; Stimme;
</code></pre>
<p>Jetzt will ich herausfinden, ob in einer Stimme die höchste Note (d.h. ignoriere Pausen) mehrfach vorkommt.</p>
<p>Nexus' Idee wäre ja, der Pause eine Tonhoehe = -10000 zuzuordnen. Geht das eleganter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1982980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1982980</guid><dc:creator><![CDATA[ich bins]]></dc:creator><pubDate>Fri, 19 Nov 2010 17:01:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Fri, 19 Nov 2010 17:05:34 GMT]]></title><description><![CDATA[<p>Mir fällt nur gerade auf, dass die Vererbung</p>
<pre><code>Tonhoehe
  /
Note
</code></pre>
<p>unklug ist. Eine Note <strong>hat</strong> eine Tonhöhe, <strong>ist</strong> aber keine.</p>
<p>Ich weiss nicht, wie viel eleganter dein Problem gelöst werden kann, ohne Shade Of Mines Vorschlag zu berücksichtigen.</p>
<p>@ drakon: Das sagt uns nun sehr viel...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1982982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1982982</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 19 Nov 2010 17:05:34 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Fri, 19 Nov 2010 17:34:11 GMT]]></title><description><![CDATA[<p>Hat noch jemand eine andere Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983001</guid><dc:creator><![CDATA[ich bins]]></dc:creator><pubDate>Fri, 19 Nov 2010 17:34:11 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Fri, 19 Nov 2010 18:12:32 GMT]]></title><description><![CDATA[<p>ich bins schrieb:</p>
<blockquote>
<p>Hat noch jemand eine andere Idee?</p>
</blockquote>
<p>Hör auf Nexus. Dein Problem liegt in vermurkstem Design. Anstatt dies jetzt mit diesem Design irgendwie hinzufrickeln solltest du lieber noch einmal über die Beziehungen zwischen deinen Klassen nachdenken. Wenn das Design gut ist, dann sind dieses und andere Probleme viel einfacher zu lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983031</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 19 Nov 2010 18:12:32 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Fri, 19 Nov 2010 18:23:08 GMT]]></title><description><![CDATA[<p>Ich hab ja schon nach Nexus' Kritik meine Vererbungshierarchie geändert. Aber das hat das Problem noch nicht gelöst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983035</guid><dc:creator><![CDATA[ich bins]]></dc:creator><pubDate>Fri, 19 Nov 2010 18:23:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Sat, 20 Nov 2010 10:14:39 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>@ drakon: Das sagt uns nun sehr viel...</p>
</blockquote>
<p>Das soll heissen, dass ich die gleiche Idee schreiben wollte, dann aber gesehen habe, dass du das genau so machst und meinen Post wieder entfernt. Ich hätte auch die gleiche Idee nochmal beschreiben können, was mir aber ein wenig unsinnig erscheint, darum die Zustimmung, dass ich das gleiche vorgeschlagen hätte, aber dass ich grundsätzlich Shades Meinung bin, dass da wohl etwas mit dem Design falsch läuft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983153</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 20 Nov 2010 10:14:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Sat, 20 Nov 2010 10:35:52 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Eine Note <strong>hat</strong> eine Tonhöhe, <strong>ist</strong> aber keine.</p>
</blockquote>
<p>hat <em>vielleicht</em> eine Tonhöhe. Schlagzeugnotation ist da sowas was ziemlich aus der Reihe tanzt. Und in gewissem Maße auch der Generalbass.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983160</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Sat, 20 Nov 2010 10:35:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Sat, 20 Nov 2010 14:41:19 GMT]]></title><description><![CDATA[<p>Wenn das Originaldesign beibehalten werden würde (was ich dir nicht empfehle), könntest du vermutlich sowas basteln:</p>
<pre><code class="language-cpp">bool is_T_derived(const T&amp;) { return true; }
bool is_T_derived(...) { return false; }

struct Pred
{
    bool operator&lt;(const U&amp; lhs, const U&amp; rhs)
    {
        if(!is_T_derived(lhs))
             return is_T_derived(rhs);
        return is_T_derived(rhs) &amp;&amp; lhs.tonhoehe &lt; rhs.tonhoehe;
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1983236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983236</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 20 Nov 2010 14:41:19 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Sat, 20 Nov 2010 15:38:14 GMT]]></title><description><![CDATA[<p>Inwiefern brauchst du eigentlich die Klasse &quot;Tonhöhe&quot; in deinem Design? Wäre es nicht klüger, wenn du für deine &quot;musikalischen Objekte&quot; (also Noten, Pausen, etc.) eine Methode play() definieren würdest? So hättest du auch gleich die Pausen, Schlagzeugnoten oder was auch immer erschlagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983265</guid><dc:creator><![CDATA[Tonhöhe]]></dc:creator><pubDate>Sat, 20 Nov 2010 15:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Sat, 20 Nov 2010 16:02:06 GMT]]></title><description><![CDATA[<p>Du bist viel flexibler, wenn du &quot;spielbare&quot; und &quot;unspielbare&quot; Elemente trennst. Ob du nun eine Midi-Datei generieren willst, das Stück abspielen, den Takt transponieren oder einfach nur nach dem höchsten Ton suchen willst, du musst andauernd die Pausen von den Noten trennen.<br />
Die Pausen bekommen eine zweite Liste und die dritte Liste ist für Satzzeichen wie Bindebögen, Punktierungen, Generalbass und Text.<br />
Wenn es dich stört, mehrere Listen zu verwenden, musst du halt einen TonhöhenIterator schreiben, der verdeckt typeof aufruft. Aber das ist mehr Aufwand wie die Trennung der Listen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20068">@Michael</a> E.: Rat mal was bei <code>is_T_derived(*(static_cast&lt;Satzzeichen *&gt;(new Tonhoehe())));</code> passiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983283</guid><dc:creator><![CDATA[BachfugenFan]]></dc:creator><pubDate>Sat, 20 Nov 2010 16:02:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Vererbung und Polymorphie on Sun, 21 Nov 2010 12:12:50 GMT]]></title><description><![CDATA[<p>BachfugenFan schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20068">@Michael</a> E.: Rat mal was bei <code>is_T_derived(*(static_cast&lt;Satzzeichen *&gt;(new Tonhoehe())));</code> passiert.</p>
</blockquote>
<p>Was willst du mir sagen? <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>
<pre><code>error C2440: 'static_cast': 'Tonhoehe *' kann nicht in 'Satzzeichen *' konvertiert werden
Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1983581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983581</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 21 Nov 2010 12:12:50 GMT</pubDate></item></channel></rss>