请教一下,第二种方法看不懂。

xyjchinese 2006-11-15 02:24:09
class A
{
int value;
public:
A( int n = 0 ) : value( n ) {}
int GetValue()
{
return value;
}
};



请使用某种方式来在类的外部改变私有成员A::value的值。


第一种方法:

添加一个内部方法来实现。(略了)


第二种方法:

A a;
*( (int *)&a ) = 5;






第二种方法我看不懂,请帮忙解释一下好吗
...全文
144 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
KthTes 2006-11-15
  • 打赏
  • 举报
回复
从右往左读等号左边的内容,有:
a先被“取地址”了(&操作符),
这个地址又被强制转换成了int*,
最后,这个东西再被“取值”了一下(*操作符)。
学过编译原理的话很容易了解,在这种情况下类对象的地址实际就是类第一个成员的地址。所以a的地址就是value的。
todototry 2006-11-15
  • 打赏
  • 举报
回复
个人意见,高手多多指教
taodm 2006-11-15
  • 打赏
  • 举报
回复
那你得看《深度探索C++对象模型》了。
不过,建议你收起好奇心,把时间用在其它更急切需要学的地方。
xyjchinese 2006-11-15
  • 打赏
  • 举报
回复
哦,能说说如果类内不止一个成员而有N个数据成员,N个一般方法,N个虚函数。
那这个类的内存布局是什么呢???

下课了,明天回家晚上看完结帖。
taodm 2006-11-15
  • 打赏
  • 举报
回复
去看置顶文章:修改类属私有成员的不同方法
lann64 2006-11-15
  • 打赏
  • 举报
回复
因为对象a只需要保存value的内容。这就是对象的内存布局。一旦有虚函数那就不一样了。
xyjchinese 2006-11-15
  • 打赏
  • 举报
回复
不太明白,为什么对象a的地址就是value的地址呢???
还有2楼所说的对象的内存布局是什么??
lann64 2006-11-15
  • 打赏
  • 举报
回复
唉,看不懂说明你还没到可以使用这种方法的时候。
对这种类内只有一个数据成员,而且没有虚函数的类,类的地址就是数据成员的地址。
第二种方法就是强制转换,把a的地址,强制转换成整形指针,然后把这个指针指向的内容更换成5。
taodm 2006-11-15
  • 打赏
  • 举报
回复
第二种方法,看不懂最好!
这是hack行为,应该绝对禁止!
todototry 2006-11-15
  • 打赏
  • 举报
回复

对象a的地址强制转换成指针,利用指针修改a的值
利用类的对象的内存布局

64,645

社区成员

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

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