虚表有关问题,求大神们帮帮忙看看
虚表问题,求大神们帮帮忙看看
想通过虚表来输出一个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,原因百度“浅拷贝,深拷贝”。
想通过虚表来输出一个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,原因百度“浅拷贝,深拷贝”。