<?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[Verständniss von Vererbung&#x2F; Dynamische Bindung]]></title><description><![CDATA[<p>Buch C++ Primer Chap 15.2 S. 667/668</p>
<p>Es geht um die dynamische Bindung in Methoden. Es wird von einer Basisklasse item_base und einer abgeleiteten Klasse bulk_item ausgegangen. Item Base hat die Argumente private isbn und protected price, und die methoden string book() virtual double net_price(std::size_t n) const.<br />
Nun wird davon die klasse bulk_item abgeleitet die die methode net_price neu definiert und desweiteren die argumente size_t min_qty und double discount hinzufügt.</p>
<p>Nun wird eine funktion print_total(ostream &amp;os, const Item_base &amp;item, size_z n) erstellt und erklärt das es bei dieser funktion darauf ankommt ob sie mit einer referenz auf bulk_item oder item_base aufgerufen wird. Also sich der Ausgebene Preis ändert je nach dem welche Referenz übergeben wird. Wie soll das gehen? Die Referenz verweist doch nur auf den Item_base teil selbst wenn ein bulk_item übergeben wird. Wie also soll die virtuelle methode net_price() von bulk_item aufgerufen werden wenn diese dann argumente benötigt die nicht im referenzierten item_base teil vorhanden sind geschweige denn die methode selber im item_base teil des objektes existiert.</p>
<p>Dieser Abschnitt in dem Buch verwirrt mich immernoch obwohl ich ihn mitlerweile mehrere male gelesen habe.</p>
<p>Mfg Jud4s</p>
<pre><code class="language-cpp">void print_total(ostream &amp;os, const Item_base &amp;item, size_z n)
{
 os &lt;&lt; &quot;ISBN: &quot; &lt;&lt; item.book()    // das geht ja wird ja vererbt und ist somit in dem Basisklassenteil von bulk_item
    &lt;&lt; \tnumber sold: &quot; &lt;&lt; n &lt;&lt; &quot;\ttotal price: &quot;
    &lt;&lt; item.net_price(n) &lt;&lt; endl;  //wie soll das gehen wenn ein bulk_item übergeben wird, da die Item_base referenz doch lediglich auf den Item_base teil referenzieren kann  :confused: 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/266467/verständniss-von-vererbung-dynamische-bindung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 07:14:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266467.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 May 2010 15:53:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verständniss von Vererbung&#x2F; Dynamische Bindung on Sun, 09 May 2010 15:53:09 GMT]]></title><description><![CDATA[<p>Buch C++ Primer Chap 15.2 S. 667/668</p>
<p>Es geht um die dynamische Bindung in Methoden. Es wird von einer Basisklasse item_base und einer abgeleiteten Klasse bulk_item ausgegangen. Item Base hat die Argumente private isbn und protected price, und die methoden string book() virtual double net_price(std::size_t n) const.<br />
Nun wird davon die klasse bulk_item abgeleitet die die methode net_price neu definiert und desweiteren die argumente size_t min_qty und double discount hinzufügt.</p>
<p>Nun wird eine funktion print_total(ostream &amp;os, const Item_base &amp;item, size_z n) erstellt und erklärt das es bei dieser funktion darauf ankommt ob sie mit einer referenz auf bulk_item oder item_base aufgerufen wird. Also sich der Ausgebene Preis ändert je nach dem welche Referenz übergeben wird. Wie soll das gehen? Die Referenz verweist doch nur auf den Item_base teil selbst wenn ein bulk_item übergeben wird. Wie also soll die virtuelle methode net_price() von bulk_item aufgerufen werden wenn diese dann argumente benötigt die nicht im referenzierten item_base teil vorhanden sind geschweige denn die methode selber im item_base teil des objektes existiert.</p>
<p>Dieser Abschnitt in dem Buch verwirrt mich immernoch obwohl ich ihn mitlerweile mehrere male gelesen habe.</p>
<p>Mfg Jud4s</p>
<pre><code class="language-cpp">void print_total(ostream &amp;os, const Item_base &amp;item, size_z n)
{
 os &lt;&lt; &quot;ISBN: &quot; &lt;&lt; item.book()    // das geht ja wird ja vererbt und ist somit in dem Basisklassenteil von bulk_item
    &lt;&lt; \tnumber sold: &quot; &lt;&lt; n &lt;&lt; &quot;\ttotal price: &quot;
    &lt;&lt; item.net_price(n) &lt;&lt; endl;  //wie soll das gehen wenn ein bulk_item übergeben wird, da die Item_base referenz doch lediglich auf den Item_base teil referenzieren kann  :confused: 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1894733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894733</guid><dc:creator><![CDATA[Jud4s]]></dc:creator><pubDate>Sun, 09 May 2010 15:53:09 GMT</pubDate></item><item><title><![CDATA[Reply to Verständniss von Vererbung&#x2F; Dynamische Bindung on Sun, 09 May 2010 16:29:36 GMT]]></title><description><![CDATA[<p>Du willst wissen, wie das technisch funktioniert?</p>
<p>Wenn man Klassen mit virtuellen Methoden hat, wird vom Compiler ein so genannter vtable angelegt. Vereinfacht gesagt bekommt ein Objekt wenn man es erzeugt einen versteckten Zeiger auf die richtigen Methoden. Wikipedia erklärt das ausführlicher:<br />
<a href="http://de.wikipedia.org/wiki/Tabelle_virtueller_Methoden" rel="nofollow">http://de.wikipedia.org/wiki/Tabelle_virtueller_Methoden</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1894749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894749</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 09 May 2010 16:29:36 GMT</pubDate></item><item><title><![CDATA[Reply to Verständniss von Vererbung&#x2F; Dynamische Bindung on Sun, 09 May 2010 16:48:18 GMT]]></title><description><![CDATA[<p>Obwohl ich generell wußte wie es geht, hab ich mir den wikipedia-Eintrag mal durchgelesen.</p>
<p>Jetzt bin ich etwas überrascht, dass sie in der Abbildung oben rechts eine<br />
vtable für eine abstrakte Klasse haben. Existiert so eine wirklich<br />
oder nur beim Kompilieren, damit man die notwendige Reihenfolge kennt?<br />
Wenn ja, wozu dient sie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1894754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894754</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 09 May 2010 16:48:18 GMT</pubDate></item><item><title><![CDATA[Reply to Verständniss von Vererbung&#x2F; Dynamische Bindung on Sun, 09 May 2010 16:53:12 GMT]]></title><description><![CDATA[<p>nein wie das logisch gehen soll</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1894756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894756</guid><dc:creator><![CDATA[Jud4s]]></dc:creator><pubDate>Sun, 09 May 2010 16:53:12 GMT</pubDate></item><item><title><![CDATA[Reply to Verständniss von Vererbung&#x2F; Dynamische Bindung on Sun, 09 May 2010 17:44:32 GMT]]></title><description><![CDATA[<p>Deinem geschwaller kann man nicht zweifelsfrei entnehmen, wie der Sourcecode aussieht. Warum um alles in der Welt zeigst du den Sourcecode?</p>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1894768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1894768</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 09 May 2010 17:44:32 GMT</pubDate></item></channel></rss>