虚表有关问题,求大神们帮帮忙看看

虚表问题,求大神们帮帮忙看看
想通过虚表来输出一个age。。为什么老是输出错误啊。
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class Animal{
    int age;
    public:
        virtual void run(){
            cout<<"animal run"<<endl;
        }
        Animal(int age=10):age(age){                
        }
};
class Cat:public Animal{
    public:
        void run(){
            cout<<"猫去抓老鼠"<<endl;
        }
};
int main(){
    cout<<sizeof(Animal)<<endl;
    Animal a(20);
    cout<<sizeof a<<endl;
    int *pi=static_cast<int*>(malloc(4));
    memcpy(pi,&a+5,4);
    cout<<"age="<<*pi<<endl;
}

------解决方案--------------------
出发点是错的
------解决方案--------------------
&a+1相当于&a+1*sizeof(a),pi指向a的地址+8字节的位置,而不是age的地址。
char *p=reinterpret_cast<char*>(&a);
memcpy(pi,p+4,4);
可以这样修改。。
另外,强烈建议不用对对象使用memcpy,原因百度“浅拷贝,深拷贝”。