Ich stieß kürzlich auf einige dodgy Code. Aber das Verhalten hat mich ein wenig verblüfft. Das Folgende ist eine Vereinfachung des Problems (im Grunde fehlt das virtuelle Schlüsselwort und macht es nicht-polymorph). Warum/wie wird "C :: foo called, i: 5" gedruckt?Unerwartete C++ - Verhalten in dem folgenden Programm
Wie kann das Objekt im Speicher sogar 'ich' drin haben? Ich habe C++ 03 und C++ 11 ausprobiert.
#include <iostream>
using namespace std;
class P
{
public:
void foo()
{
cout << "P::foo called" << endl;
}
};
class C : public P
{
public:
void foo()
{
i = 5;
cout << "C::foo called, i: " << i << endl;
}
int i;
};
int main()
{
C* c = static_cast<C*>(new P());
c->foo();
}