2016-04-26 13 views
0

Ich weiß, dass das Slicing passiert, wenn das abgeleitete Objekt dem Basisobjekt zugewiesen wird. Der erste Teil des abgeleiteten Klassenobjekts wird in das Basisobjekt kopiert. Und hier ist mein quesition:was passiert, wenn ein abgeleitetes Klassenobjekt einem Basisklassenobjekt zugewiesen wird (ich meine Objekt-Assignment, nicht Pointer)

  1. Wird die vptr (virtuelle Tabellenzeiger) auf Basisklasse Objekt kopiert werden?
  2. Wenn vptr nicht in das Basisklassenobjekt kopiert wird (ich denke, da die Objektzuordnung keinen Polymorphismus verursacht), warum? Gibt es eine Regel, die das unterstützt?

Antwort

1

Nein, kein Vtable-Zeiger wird kopiert. Dies könnte auch nicht der Fall sein, da das Zielobjekt sowohl vor als auch nach der Zuweisung tatsächlich vom Typ der Basisklasse ist.

Virtuelle Methoden, die für ein zerschnittenes Objekt aufgerufen werden, rufen die Basisklassenimplementierungen auf.