继承后类成员地址发生变化导致成员不可用

trytry1992 2017-05-11 11:18:51
例如类A有很多个成员,其中一个成员为m,
类B继承类A,
打了断点在类A和类B的构造函数中发现,m的地址前后不一样,什么情况会发生这种原因呢?
...全文
149 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
trytry1992 2017-05-22
  • 打赏
  • 举报
回复
已经解决了,是因为引用的库里定义的winnt版本宏和项目里的不同,导致内存对齐不同导致的
时光若止-Dale 2017-05-11
  • 打赏
  • 举报
回复
基类的成员函数在派生类中没有重写,派生类中会保留一份基类的成员在自己的内存中,成员函数的地址自然不同,当派生类重写了基类的成员函数, 在派生类中则会替换相同偏移量的基类成员函数,地址也会相同
幻夢之葉 2017-05-11
  • 打赏
  • 举报
回复
不是指针不会改变,除非是两个m
paschen 版主 2017-05-11
  • 打赏
  • 举报
回复
如果你A、B中都有成员m,虽然名字相同,它们是两个不同的变量
时光若止-Dale 2017-05-11
  • 打赏
  • 举报
回复
引用 4 楼 trytry1992的回复:
[quote=引用 2 楼 qq_36782456 的回复:] 基类的成员函数在派生类中没有重写,派生类中会保留一份基类的成员在自己的内存中,成员函数的地址自然不同,当派生类重写了基类的成员函数, 在派生类中则会替换相同偏移量的基类成员函数,地址也会相同
只是成员变量,不是函数,而且是同一个实例[/quote] 你把代码贴出来吧,我们看看
幻夢之葉 2017-05-11
  • 打赏
  • 举报
回复
引用 3 楼 trytry1992 的回复:
[quote=引用 1 楼 jianwen0529 的回复:] 不是指针不会改变,除非是两个m
我也是这么认为的,可是打断点看真改变了 难以理解[/quote] 上图或者上代码
trytry1992 2017-05-11
  • 打赏
  • 举报
回复
引用 2 楼 qq_36782456 的回复:
基类的成员函数在派生类中没有重写,派生类中会保留一份基类的成员在自己的内存中,成员函数的地址自然不同,当派生类重写了基类的成员函数, 在派生类中则会替换相同偏移量的基类成员函数,地址也会相同
只是成员变量,不是函数,而且是同一个实例
trytry1992 2017-05-11
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:
不是指针不会改变,除非是两个m
我也是这么认为的,可是打断点看真改变了 难以理解

65,187

社区成员

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

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