Virtuelle Tabellen und virtuellen Zeiger für mehrere virtuelle Vererbung und Typumwandlung

Ich bin etwas verwirrt über vptr und Darstellung der Objekte in den Speicher, und hoffe Ihr könnt mir helfen zu verstehen die Sache besser.

  1. Betrachten B erbt von A und beide definieren virtuelle Funktionen f(). Von dem, was ich gelernt, die Repräsentation eines Objekts der Klasse B im Speicher sieht wie folgt aus:[ vptr | A | B ]
    und die vtbl dass vptr Punkte enthält B::f(). Ich habe auch verstanden, dass durch die Umwandlung des Objekts aus B zu A tut nichts, außer das ignorieren der B Teil an das Ende des Objekts. Ist es wahr? Nicht dieses Verhalten falsch ist? Wir wollen, dass das Objekt des Typs A ausführen A::f() Methode und nicht B::f().
  2. Gibt es eine Reihe von vtables im system als die Anzahl der Klassen?
  3. Wie wird ein vtable von der Klasse erbt, die aus zwei oder mehr Klassen Aussehen? Wie wird das Objekt von C dargestellt werden, in den Speicher?
  4. Gleiche wie Frage 3, aber mit der virtuellen Vererbung.

InformationsquelleAutor Artium | 2010-07-24

Schreibe einen Kommentar