免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: pengxihan

【C++】C++私有成员访问权限的一个疑问 [复制链接]

论坛徽章:
0
发表于 2010-07-27 11:52 |显示全部楼层
回复 5# donglongchao


如果说C++的访问权限是针对类的,不是针对对象的,那么我觉得这一点是C++的缺陷,如果两个同类的对象想保护自己的隐私信息,那该如何实现呢?


就好比你和我都属于人类,难道彼此就可以直接访问对方的隐私信息了?

论坛徽章:
0
发表于 2010-07-27 12:05 |显示全部楼层
本帖最后由 donglongchao 于 2010-07-27 12:08 编辑
回复  donglongchao


如果说C++的访问权限是针对类的,不是针对对象的,那么我觉得这一点是C++的缺陷, ...
pengxihan 发表于 2010-07-27 11:52

缺陷谈不上,只不过是一种取舍妥协的设计吧。因为别的语言可能是针对对象的,比如Ada(可能是?存疑,因为我以前看过一篇介绍这方面的文章,记不清了)。
另外访问控制权限只是针对编译期间,运行期间就没有这个概念了。就像前面有仁兄说的那样,使用指针就可以了。
关于你那个比喻,我还要想一下。
更多疑问,请找 滑铁卢。偶是新手。。。

论坛徽章:
0
发表于 2010-07-27 12:20 |显示全部楼层
回复  donglongchao


如果说C++的访问权限是针对类的,不是针对对象的,那么我觉得这一点是C++的缺陷, ...
pengxihan 发表于 2010-07-27 11:52


你我都是人类,我不能直接查看你的隐私属性,但是我可以通过你公开的信息得到其中包含的隐私,这点不违法吧。

论坛徽章:
0
发表于 2010-07-27 12:22 |显示全部楼层
回复  donglongchao


如果说C++的访问权限是针对类的,不是针对对象的,那么我觉得这一点是C++的缺陷,如果两个同类的对象想保护自己的隐私信息,那该如何实现呢?


就好比你和我都属于人类,难道彼此就可以直接访问对方的隐私信息了?
pengxihan 发表于 2010-07-27 11:52



    这是C++的问题,你问的问题会让C++作者BS羞愧脸红的。

论坛徽章:
0
发表于 2010-07-27 12:26 |显示全部楼层
你我都是人类,我不能直接查看你的隐私属性,但是我可以通过你公开的信息得到其中包含的隐私,这点不违 ...
davelv 发表于 2010-07-27 12:20



    这个公开是把同类对象的一律强制性的公开,没法做到个例的不公开

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
发表于 2010-07-27 13:55 |显示全部楼层
回复  donglongchao


如果说C++的访问权限是针对类的,不是针对对象的,那么我觉得这一点是C++的缺陷, ...
pengxihan 发表于 2010-07-27 11:52


1、那么请问LZ,拷贝构造要怎么做才能挨个复制数据源私有变量的内容呢?
2、类是你自己设计的,你在自己设计的成员函数里面都不能保证对象内容的安全性,那么谁还能保证?C++不是老妈(http://bbs.chinaunix.net/viewthread.php?tid=1676940),管不了那么多(貌似老妈也不管)。
3、如果说用人来做这个对象比喻的话,那么道德和法律是规范人们是否可以窥视他人隐私的一种约束。但是这不是绝对的,如果你愿意提供一个方法给他人窥视的话,那么他人就可以窥视;同样的,如果你提供这样一个成员函数的话相互访问的话,为什么要绝对地拒绝你?(虽然访问的是其他对象的成员,但是它自己本身也同样可以成为这个其他对象,所以可以视为它“自己愿意提供”)

论坛徽章:
0
发表于 2010-07-27 14:27 |显示全部楼层
1、那么请问LZ,拷贝构造要怎么做才能挨个复制数据源私有变量的内容呢?
2、类是你自己设计的,你在自 ...
w_anthony 发表于 2010-07-27 13:55



我的意思是同类的两个对象之间可以访问彼此的私有信息,这点有点不解。
就像这里的foo函数,如果它访问本对象的私有成员x无可厚非的,但是为什么能直接访问到a对象的私有成员x呢?



void A::foo(A & a)
{
        a.x = 2;
}


我觉得只有认为C++的访问权限只针对类,不针对对象才能解释的通。

论坛徽章:
1
午马
日期:2013-08-23 23:39:47
发表于 2010-07-27 14:35 |显示全部楼层
我的意思是同类的两个对象之间可以访问彼此的私有信息,这点有点不解。
就像这里的foo函数,如果它访 ...
pengxihan 发表于 2010-07-27 14:27



    一个类知道自己的细节有错吗,

论坛徽章:
0
发表于 2010-07-27 14:45 |显示全部楼层
本帖最后由 davelv 于 2010-07-27 14:47 编辑
我的意思是同类的两个对象之间可以访问彼此的私有信息,这点有点不解。
就像这里的foo函数,如果它访 ...
pengxihan 发表于 2010-07-27 14:27

这是你自己非要把修改隐私的权利公开化,如果你写成


void A::foo()
{
        this->x = 2;
}
这样就只能修改对象自己的成员变量。

举个例子,例如老师让你去写家庭状况,本来把大概的信息写出来就行,结果自己非要去写很多暴露家庭内幕的东西上去也不能怪老师没说阿。
其实面向对象这个东西 很对人的理解不太一致,仅用语法也不能完全规范主观意愿,所以才会根据不同类型的需求衍生出各种代码风格,设计模式,框架之类的东西。

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
发表于 2010-07-27 14:45 |显示全部楼层
我的意思是同类的两个对象之间可以访问彼此的私有信息,这点有点不解。
就像这里的foo函数,如果它访 ...
pengxihan 发表于 2010-07-27 14:27



本来就是针对类的。如果改成针对对象的,那么我的第一个问题,你要怎么解决?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP