<?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[Virtual Table (vtbl) der Aufbau?]]></title><description><![CDATA[<p>Wie ist der schematische Aufbau von der Virtual Table zu verstehen?</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class X
{
  private:
    int i;
  public:
    virtual void push();
    virtual void pop();
    virtual void delete();
};

class Y : public X
{
  private:
   int j;
   virtual void push();
   virtual void pop();
};

int main()
{
  X x;
  Y y;
  return 0;
}
</code></pre>
<p>folglich existieren 2! Virtual Table eines für Objekte der Klasse X und eines für Objekte der Klasse Y. Richtig?</p>
<p>Die Virtuellen Tabellen werden dann so aussehen?</p>
<pre><code>+---------------+     +--&gt;  +---------------+ &lt;--+
|     obj x     |     |     |  vtbl    X    |    |
+---------------+     |     +---------------+    | 
|     vtptr     ------+     |ptrBasis: NULL |    |
+---------------+           +---------------+    |
|     int i     |           |  X::push()    |    |
+---------------+           |  X::push()    |    |
                            |  X::delete()  |    |
                            +---------------+    | 
                                                 |
+---------------+     +--&gt;  +---------------+    |
|     obj y     |     |     |  vtbl    Y    |    | 
+---------------+     |     +---------------+    |
|     vtptr     ------+     |ptrBasis: zeigt ---–+
+---------------+           +---------------+
|     int j     |           |  Y::push()    |
+---------------+           |  Y::push()    |
                            |  Y::delete()? |
                            +---------------+
</code></pre>
<p>Ich nehme mal an:</p>
<p>Die Pointer ptrBasis lassen sich bei Mehrfachvererbung bel. erweitern<br />
Bei weiteren Klassen wird einfach die Liste erweitert<br />
Alle virtuellen Funktionen werden bei jeder Virtuellen Tabelle nochmals angegeben</p>
<p>Ich hoffe ich habe jetzt keinen riesen Bock geschossen! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/250043/virtual-table-vtbl-der-aufbau</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 04:10:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/250043.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 15 Sep 2009 16:58:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Virtual Table (vtbl) der Aufbau? on Tue, 15 Sep 2009 17:09:18 GMT]]></title><description><![CDATA[<p>Wie ist der schematische Aufbau von der Virtual Table zu verstehen?</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">class X
{
  private:
    int i;
  public:
    virtual void push();
    virtual void pop();
    virtual void delete();
};

class Y : public X
{
  private:
   int j;
   virtual void push();
   virtual void pop();
};

int main()
{
  X x;
  Y y;
  return 0;
}
</code></pre>
<p>folglich existieren 2! Virtual Table eines für Objekte der Klasse X und eines für Objekte der Klasse Y. Richtig?</p>
<p>Die Virtuellen Tabellen werden dann so aussehen?</p>
<pre><code>+---------------+     +--&gt;  +---------------+ &lt;--+
|     obj x     |     |     |  vtbl    X    |    |
+---------------+     |     +---------------+    | 
|     vtptr     ------+     |ptrBasis: NULL |    |
+---------------+           +---------------+    |
|     int i     |           |  X::push()    |    |
+---------------+           |  X::push()    |    |
                            |  X::delete()  |    |
                            +---------------+    | 
                                                 |
+---------------+     +--&gt;  +---------------+    |
|     obj y     |     |     |  vtbl    Y    |    | 
+---------------+     |     +---------------+    |
|     vtptr     ------+     |ptrBasis: zeigt ---–+
+---------------+           +---------------+
|     int j     |           |  Y::push()    |
+---------------+           |  Y::push()    |
                            |  Y::delete()? |
                            +---------------+
</code></pre>
<p>Ich nehme mal an:</p>
<p>Die Pointer ptrBasis lassen sich bei Mehrfachvererbung bel. erweitern<br />
Bei weiteren Klassen wird einfach die Liste erweitert<br />
Alle virtuellen Funktionen werden bei jeder Virtuellen Tabelle nochmals angegeben</p>
<p>Ich hoffe ich habe jetzt keinen riesen Bock geschossen! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1778945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1778945</guid><dc:creator><![CDATA[DeepCopy]]></dc:creator><pubDate>Tue, 15 Sep 2009 17:09:18 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual Table (vtbl) der Aufbau? on Tue, 15 Sep 2009 17:11:26 GMT]]></title><description><![CDATA[<p>Frag den Hersteller deines Compilers. Es muss nicht einmal vtables geben. Warum sollte dann irgendein schematischer Aufbau richtig oder falsch sein?</p>
<p>//edit ich will mal nicht so sein:<br />
<a href="http://de.wikipedia.org/wiki/Tabelle_virtueller_Methoden" rel="nofollow">http://de.wikipedia.org/wiki/Tabelle_virtueller_Methoden</a></p>
<p>Wie das genau implementiert ist, kann dir aber niemand sagen, außer die Compilerhersteller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1778949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1778949</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 15 Sep 2009 17:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual Table (vtbl) der Aufbau? on Tue, 15 Sep 2009 17:21:50 GMT]]></title><description><![CDATA[<p>Also hier liegt der Hund begraben! <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>
<pre><code>+---------------+     +--&gt;  +---------------+ &lt;--+
|     obj x     |     |     |  vtbl    X    |    |
+---------------+     |     +---------------+    |
|     vtptr     ------+     |ptrBasis: NULL |    |
+---------------+           +---------------+    |
|     int i     |           |  X::push()    |    |
+---------------+           |  X::push()    |    |
                            |  X::delete()  |    |
                            +---------------+    |
                                                 |
+---------------+     +--&gt;  +---------------+    |
|     obj y     |     |     |  vtbl    Y    |    |
+---------------+     |     +---------------+    |
|     vtptr     ------+     |ptrBasis: zeigt ---–+
+---------------+           +---------------+
|     int j     |           |  Y::push()    |
+---------------+           |  Y::push()    |
                            |  X::delete()  |  &lt;-- muss X::delete()
                            +---------------+
</code></pre>
<p>Den Rest habe ich mir dann wohl selbst richtig zusammengereimt, danke! <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="👍"
    /></p>
<p>Damit wird, was ich schon befürchtet, die gesamte Klassendeklaration von virtuelle Elementfunktionen mitgeschleppt. D.h. gibt es in anderen Sprachen wzb. Pascal auch das Konzept von dynamic und virtual getrennt um diesen Overhead zu vermeiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1778957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1778957</guid><dc:creator><![CDATA[DeepCopy]]></dc:creator><pubDate>Tue, 15 Sep 2009 17:21:50 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual Table (vtbl) der Aufbau? on Tue, 15 Sep 2009 17:24:13 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Wie das genau implementiert ist, kann dir aber niemand sagen, außer die Compilerhersteller.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1778958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1778958</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 15 Sep 2009 17:24:13 GMT</pubDate></item><item><title><![CDATA[Reply to Virtual Table (vtbl) der Aufbau? on Tue, 15 Sep 2009 19:15:00 GMT]]></title><description><![CDATA[<p>was soll daran overhead sein? jede (normale) klasse hat einen zeiger mehr.<br />
lässt sich eh nicht vermeiden. das einzige was größer ist, ist die tabelle pro<br />
klasse. die paar bytes. wieviele klassen hast du höchstens? 100. wieviele methoden<br />
pro klasse? 20? 8kb an tabellen. gaaaaaaanz mies. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> das layout ist schon ok, da<br />
du in konstanter zeit auf eine methode zu greifen kannst (bei normalen klassen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1779011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1779011</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Tue, 15 Sep 2009 19:15:00 GMT</pubDate></item></channel></rss>