Meine Frage ist, unter Bezugnahme auf this question, die erklärt, wie virtuelle Funktionen bei Objekt Slicing arbeiten, die Basisklasse virtuelle Funktion aufrufen Ende und Wikipedia article, die den virtuellen Tabellen-Layout für eine abgeleitete Klasse für Code unten erklärtVirtuelle Funktionen Objekt Slicing
class A{
public:
virtual void func(){ cout<<"\n In A:func";}
};
class B:public A{
public:
virtual void func(){ cout<<"\n In B:func";}
};
main(){
A *ptr1 = new B();
A oA = *ptr1;
oA.func();
}
DerviedClassObjectB:
+0: pointer to virtual method table of B
virtual method table of B:
+0: B::func
Über Programmausgaben "In A :: func".
Aber wie ohne virtuelle Tabelle tut für Klasse B: Jetzt wird gespart Basisklasse A :: func endet A :: func