| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1250 人关注过本帖
标题:对象参数与私有变量
只看楼主 加入收藏
书呆
Rank: 3Rank: 3
等 级:论坛游侠
帖 子: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
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:20 
有直接修改么 你不是从公有调用函数改的吗?
2010-03-29 21:51
书呆
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:188
注 册:2010-3-26
收藏
得分:0 
呃。。。明白了

沉醉东风月下读。柴门闭,莫管客来无。
2010-03-29 23:22
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
这只是个编程思想,如果你希望并允许调用者来修改这个私有变量,你就为他准备这个函数来修改这个变量,如果不希望,也不允许,你就不写这个函数,那么使用你的代码的人就明白你的意图了(当然这个使用者是指正常使用者)。
私有变量只是在编译期的保护,并只是为调用者传达自己的编程意图,它并不能真真做到私有,比如类A,可以不用f函数就可以达到修改私有变量x的目的:
A a;
*((int*)(&a)) = 100;
这样可以把私有变量赋值为100,这种做法需要知道类A的数据结构,并通过实例对象a的首地址和变量x在a中的偏移地址来达到修改目的的,换句话说,如果我知道你的类结构,就可以访问到类中的所有私有成员变量并达到修改的目的。有兴趣的话可以通过调试研究一下。
2010-03-29 23:24
书呆
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:188
注 册:2010-3-26
收藏
得分:0 
回复 4楼 debroa723
我明白了,这也是OO封装的原因之一吧。。。
谢谢

沉醉东风月下读。柴门闭,莫管客来无。
2010-03-30 12:11
wei0000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:136
注 册:2010-3-12
收藏
得分:0 
*((int*)(&a)) = 100;
请问这句是什么意思啊?
能帮忙详细解释解释吗?
2010-03-30 16:54
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
&a:取对象a的首地址
(int*):将前面取到的地址强转成int形指针
*(int形指针)=100;//就象是对一个整形指针所指内容赋值一样。
2010-03-30 20:01
wei0000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:136
注 册:2010-3-12
收藏
得分:0 
那再问一下,*((int*)(&a)) = 100;是怎么实现将类的私有变量赋值为100的??
还有那个私有变量x的偏移量是怎么得到啊?????
能再帮忙解答一下疑问吗?很感谢啊!!!
2010-03-30 20:16
书呆
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:188
注 册:2010-3-26
收藏
得分:0 
由类A的结构,在对象a的存储空间中变量x偏移量为0,所以把a的地址强转为指针后,就指向a的x,从而对该指针
指向空间的赋值,就相当于对x的赋值

沉醉东风月下读。柴门闭,莫管客来无。
2010-03-30 22:27
wei0000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:136
注 册:2010-3-12
收藏
得分:0 
那再问下,私有变量和公有变量在对象a中的偏移量都是0吗??
还有如果有两个私有变量x,y或两个公有变量m,n,他们在对象a中的偏移量也都是0吗??这样的话,像上面那样赋值,不是就不清楚到底是给哪个变量赋值了吗???
2010-03-31 11:15
快速回复:对象参数与私有变量
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018752 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved