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

坏蛋编程 2013-10-30 10:48:03
想通过虚表来输出一个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;
}
...全文
55 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
donggua3664 2013-10-30
  • 打赏
  • 举报
回复
&a+1相当于&a+1*sizeof(a),pi指向a的地址+8字节的位置,而不是age的地址。 char *p=reinterpret_cast<char*>(&a); memcpy(pi,p+4,4); 可以这样修改。。 另外,强烈建议不用对对象使用memcpy,原因百度“浅拷贝,深拷贝”。
坏蛋编程 2013-10-30
  • 打赏
  • 举报
回复
引用 1 楼 mougaidong 的回复:
出发点是错的
能不能说清楚点啊
坏蛋编程 2013-10-30
  • 打赏
  • 举报
回复
能不能具体点啊?还是不是很清楚啊
turing-complete 2013-10-30
  • 打赏
  • 举报
回复
出发点是错的

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧