最近、私はいくつかの厄介なコードを発見しました。しかし、その行動は私を少し唖然とさせた。以下は問題の簡素化です(基本的には仮想キーワードが欠落していて、非多形性になっています)。なぜ、「C :: foo called、i:5」と表示されているのですか?次のプログラムで予期しないC++の動作が発生しました
メモリ内のオブジェクトはどのように「i」を持つことができますか?私はC++ 03とC++ 11を試しました。
#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();
}