|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
C++论坛
→
『 C++教室 』
→ 对象参数与私有变量
我的收件箱(0)
共有
1250
人关注过本帖
标题:
对象参数与私有变量
只看楼主
加入收藏
书呆
等 级:
论坛游侠
帖 子:55
专家分:188
注 册:2010-3-26
结帖率:
100%
楼主
收藏
已结贴
√
问题点数:20 回复次数:13
对象参数与私有变量
请看:
class A
{
public:
int f(A &a);
private:
int x;
};
int A::f(A &a)
{
a.x = 0;
return 0;
}
意味着参数a的私有变量x可以被其他对象直接修改,怎么还能叫私有 ?
沉醉东风月下读。柴门闭,莫管客来无。
2010-03-29 20:49
举报帖子
使用道具
赠送鲜花
hahayezhe
来 自:湖南张家界
等 级:
贵宾
威 望:
24
帖 子:1386
专家分:6999
注 册:2010-3-8
第
2
楼
收藏
得分:20
有直接修改么 你不是从公有调用函数改的吗?
2010-03-29 21:51
举报帖子
使用道具
赠送鲜花
书呆
等 级:
论坛游侠
帖 子:55
专家分:188
注 册:2010-3-26
第
3
楼
收藏
得分:0
呃。。。明白了
沉醉东风月下读。柴门闭,莫管客来无。
2010-03-29 23:22
举报帖子
使用道具
赠送鲜花
debroa723
等 级:
贵宾
威 望:
23
帖 子:862
专家分:1954
注 册:2008-10-12
第
4
楼
收藏
得分:0
这只是个编程思想,如果你希望并允许调用者来修改这个私有变量,你就为他准备这个函数来修改这个变量,如果不希望,也不允许,你就不写这个函数,那么使用你的代码的人就明白你的意图了(当然这个使用者是指正常使用者)。
私有变量只是在编译期的保护,并只是为调用者传达自己的编程意图,它并不能真真做到私有,比如类A,可以不用f函数就可以达到修改私有变量x的目的:
A a;
*((int*)(&a)) = 100;
这样可以把私有变量赋值为100,这种做法需要知道类A的数据结构,并通过实例对象a的首地址和变量x在a中的偏移地址来达到修改目的的,换句话说,如果我知道你的类结构,就可以访问到类中的所有私有成员变量并达到修改的目的。有兴趣的话可以通过调试研究一下。
2010-03-29 23:24
举报帖子
使用道具
赠送鲜花
书呆
等 级:
论坛游侠
帖 子:55
专家分:188
注 册:2010-3-26
第
5
楼
收藏
得分:0
回复 4楼 debroa723
我明白了,这也是OO封装的原因之一吧。。。
谢谢
沉醉东风月下读。柴门闭,莫管客来无。
2010-03-30 12:11
举报帖子
使用道具
赠送鲜花
wei0000
等 级:
论坛游侠
威 望:
1
帖 子:80
专家分:136
注 册:2010-3-12
第
6
楼
收藏
得分:0
*((int*)(&a)) = 100;
请问这句是什么意思啊?
能帮忙详细解释解释吗?
2010-03-30 16:54
举报帖子
使用道具
赠送鲜花
debroa723
等 级:
贵宾
威 望:
23
帖 子:862
专家分:1954
注 册:2008-10-12
第
7
楼
收藏
得分:0
&a:取对象a的首地址
(int*):将前面取到的地址强转成int形指针
*(int形指针)=100;//就象是对一个整形指针所指内容赋值一样。
2010-03-30 20:01
举报帖子
使用道具
赠送鲜花
wei0000
等 级:
论坛游侠
威 望:
1
帖 子:80
专家分:136
注 册:2010-3-12
第
8
楼
收藏
得分:0
那再问一下,*((int*)(&a)) = 100;是怎么实现将类的私有变量赋值为100的??
还有那个私有变量x的偏移量是怎么得到啊?????
能再帮忙解答一下疑问吗?很感谢啊!!!
2010-03-30 20:16
举报帖子
使用道具
赠送鲜花
书呆
等 级:
论坛游侠
帖 子:55
专家分:188
注 册:2010-3-26
第
9
楼
收藏
得分:0
由类A的结构,在对象a的存储空间中变量x偏移量为0,所以把a的地址强转为指针后,就指向a的x,从而对该指针
指向空间的赋值,就相当于对x的赋值
沉醉东风月下读。柴门闭,莫管客来无。
2010-03-30 22:27
举报帖子
使用道具
赠送鲜花
wei0000
等 级:
论坛游侠
威 望:
1
帖 子:80
专家分:136
注 册:2010-3-12
第
10
楼
收藏
得分:0
那再问下,私有变量和公有变量在对象a中的偏移量都是0吗??
还有如果有两个私有变量x,y或两个公有变量m,n,他们在对象a中的偏移量也都是0吗??这样的话,像上面那样赋值,不是就不清楚到底是给哪个变量赋值了吗???
2010-03-31 11:15
举报帖子
使用道具
赠送鲜花
14
1/2页
1
2
快速回复:
对象参数与私有变量
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018078 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved