类,我有点不明白你?########################星级大狭请发言!

linuxgyh 2004-08-27 02:31:07
类,为什么要有 私有,保护,公共,的成员,麻烦,
我觉得,没有,一样可以用,类为什么要封装?不要乱访问
就可以了吗?
星级大狭请发言!
...全文
1200 49 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckacka 2004-08-29
  • 打赏
  • 举报
回复
其实封装也不过是一个很简单的问题,完全可以用任何语言在语言级别上手工模拟出来。

然而,对于“类”这个概念来说,在语言本身来说真正的意义在于他的继承性,多态等等。

所以说,如果对“类”的认识只是在封装上,那也只是一些感性的认识罢了。
庄鱼 2004-08-29
  • 打赏
  • 举报
回复
原文错别字一字未改,大家笑看吧
庄鱼 2004-08-29
  • 打赏
  • 举报
回复
打个比方吧:
private相当于你的被窝,protected就好比你的家,public则是你开的旅店
D相当于对象:D是你的老婆、孩子自然可以进你的被窝,但你的父母、兄弟、姐妹却不能这样,外人更是免谈。
D是你的家人、亲戚朋友,就可以到你的家来,他们也可以带他们的好朋友到你家供你认识;但其他的人,如果不是很熟,你是不会然他们进家门的;陌生人更别说。
D是客人,他们可以到你店里消费,他们可以是朋友、亲戚,也可以是陌生人,但是,你不会让乞丐、流浪汉住进来,遇到小偷、流氓之类你更会报警。
继承的关系,就同我说的例子是一样的道理。

再这样打个比方吧:
你看到一个漂亮mm,可使对方不认识你,你说最近服务的这家旅店正在搞周年庆,前100名可以享受免费晚餐,mm半信半疑的前往。对外public
你的旅店很精致,服务很好,客人很多,而且有不少名流光顾,mm看了很心动,想到这里来工作,你心里乐滋滋的,假意跟人事商量,最后录取了她。那么她就必须面对你的客人,这是她的要求就是public
在相当长时间里,她都不知道你是这家店的真正老板,出于感激,她愿意与你交往,你在电力发现其不仅漂亮而且还很聪明,做事很得体,你就打算将她介绍给你父母,出于观察的考虑,你不希望家里人对她说你是老板,于是对她就是protected
她到你家,见你的家人很热情得体,房屋虽不很大但很有亲切感,很有一种家的感觉,想想自己在外漂泊也实在辛苦,很愿意与你交朋友,于是她对你就是protected
相处了一段时间,你觉得她实在很难的,是做妻子的上上人选,于是就向她求婚,这是你对他就是private
她与你交往一年,觉得你各方面都不错,只是担心你职位太低将来生活没着落,于是你告诉她其实你一直瞒着她你就是老板,听了又惊又喜高兴的答应了你的求婚,这样她对你就成了private
对D而言,该选择何种策略,完全依赖于你希望它所扮演的角色,无论是继承抑或是需求限定语义,其实都是一回事,差别只在于你怎么看。

---------------------------------------------
上面两段文字是我回人问题的帖子,贴在这里,希望对楼主有所帮助。
yingzhuo 2004-08-29
  • 打赏
  • 举报
回复
关注~
linuxgyh 2004-08-29
  • 打赏
  • 举报
回复
其实封装也不过是一个很简单的问题,完全可以用任何语言在语言级别上手工模拟出来。

然而,对于“类”这个概念来说,在语言本身来说真正的意义在于他的继承性,多态等等。
tatbaby 2004-08-29
  • 打赏
  • 举报
回复
精华贴,这么多星星出现呀


短歌如风 2004-08-28
  • 打赏
  • 举报
回复
>但是,没有它,我可以更简单完成任务!

如果是这样,那么可以说:“有它,你也可以同样简单地完成任务,因为你可以不使用。”

C++是从C加以扩充发展出来的,而扩充的基本原则并不是找到一个“最优”的逻辑然后要求程序员遵循这种逻辑开发,而是向C中不断加入一些可选的新特性;如果你不使用这一新特性,它对你不会产生任何影响。维护程序员的“选择的自由”是C++发展的一大特点,之所以没有在语言级加入“垃圾回收”机制也是有这个原因在内的——如果不在语言级加入,现在各种第三方的垃圾回收库也实现了这一能力;而一旦在语言级加入了,程序员就很难选择“不使用”了。我不明白一个“最优”的语言究竟应该是什么样子,也许在特定的应用领域可以定义出来,但C++并不是一个专用语言,我觉得程序员有“选择的自由”还是很不错的。

此外,具体到楼主所提的具体问题,我还是不明白去掉访问级别概念之后怎么会“更简单地完成任务”,我觉得只会使封装的实现变得更复杂。
linuxgyh 2004-08-28
  • 打赏
  • 举报
回复
to rorot(喵喵喵。。。[无聊啊]。。。。。。。。)

你确实说的不错,我还说了大家也说的不错,但是大家只在现在的“制度”下想问题,大家只是,先入为主而已,没有跑出现有的“语言”这个框框,
大家只是说,有这些,可以怎么怎么样,我当然知道,但是,没有它,我可以更简单完成任务!
sandrowjw 2004-08-28
  • 打赏
  • 举报
回复
首先,楼主不是在讨论类,因为楼主已经承认了封装的作用,楼主在说一种新的概念和形式,由于类已经有了它的概念和形式(实际上是面向对象,而不是类)。

那么我们先抛开类,于是看到一个楼主所说得不束缚开发人员,但是更加高级的形式。

但是楼主没有说这种形式是什么,所以我猜想楼主是要和类(面向对象的概念)作比较,来得到这种高级的形式(否则我们就没有依据了);所以楼主的问题空间已经很明确了,适合面向对象类似的一个问题空间,而且可能比面向对象更加大。

楼上好几位星星已经阐述了面向对象的概念和它的问题空间,如果楼主认为不清楚,可以去看书。现在,请楼主给出你相应的对于解空间的想法。

如果楼主不是在这个问题空间里讨论,那么请给出你的问题空间,并把你的标题改掉。如果你给出的是全空间,那么我们没有资格回答你,也没有必要回答你。如果楼主认为问题空间这个概念本身也是值得商榷的,那么也请楼主说明。

偶不是星星,不能多说了,现在请楼主发言……
coyprightbao 2004-08-28
  • 打赏
  • 举报
回复
mark
FrankZhang123 2004-08-28
  • 打赏
  • 举报
回复
我觉得封装之中的各种限制就好像规尺,不用尺子和圆规,你照样可以画圆画方,但是你能保证画得就肯定圆,肯定方吗。尺规只是一个工具,使用可以带来更多的好处,如果有限制,你也可以放弃它。
zairwolfi 2004-08-28
  • 打赏
  • 举报
回复
a




_____________________________________________________________________________

该问题已经结贴 ,得分记录: zairwolfc (500)
rorot 2004-08-28
  • 打赏
  • 举报
回复
1 从这个类面向的对象角度
一个类,至少面对的有2类对象: 1 是这个类的开发者developer, 2就是这个类的使用者user;
public至少可以说是用来约束user这类对象的. 不让他参与这个类的设计和实现, 而只是给他提供一个对象的接口,供他发挥他自己的编码.
身为developer,责任在于维护public接口的稳定, 他可以随便改动private甚至protected部分, 只要不影响public接口和衍生类.

eg: 大多数树里面可能有这样的插入函数
class Tree
{
...
public:
ErrorCode Insert( TreeNode& );
private:
ErrorCode InsertHelp( TreeNode&, TreeNode& root_ );
...
};
我想对于这个树,你没有必要理解或者知道InsertHelp函数的存在吧.
当然了你很聪明,也很严谨;即使这样的函数全部暴露出来,您也轻车熟路, 再您的使用中保证不使用类似的InsertHelp函数。
OK,电影里面驾车带MM出去兜风很COOL的,知道怎么用方向盘+刹车+油门, 懂的交通规则我们就可以上路了; 但是如果某天汽车厂发飙了,他给我们一个汽车底盘,上面除了你必要的方向盘和油门刹车外,还给您配备了直接控制发动机,液压系统,电力系统,甚至化油器的权力, 试想一个堆砌了上百个控制装置的汽车底盘,您和MM铺张报纸坐上面,以您的聪明,当然会准确无误的操作这台完全DIY的汽车,不过这样去兜风~~~俺晕了~

2 从这个类对其派生类的影响角度
一个private,可以把类成员数据捆绑在这个类里,不被其派生类使用;而没有了private,那么所有的数据都公有化,一旦这个类被继承, 其结果是所有的数据成员都又成了派生类的成员, 这带来的后果,已经不至效率,更是安全的问题.

-------------------------------------------------
program = obj1 + ojb2 + obj3 ... ;
obj = algorithm + struct;
一个OBJ,就像个人一样,有的东西是要暴露的,比如五官, 有的东西,没有必要,也是不可能暴露出来的.
俺是这样理解哈~ 纯粹胡扯,您老别往心里去,找MM兜风要紧 ;
godlessme 2004-08-28
  • 打赏
  • 举报
回复
我不是星级,说两句话楼主不知是否介意。

楼主说自己搞了几年程序了,那应该是对软件设计上的各种技术就算没有用过也都有所了解。

而且楼主也一再提到要搞“纯语言”,楼主可否把自己的具体想法贴出来让大家看看。

其实世界上又有任何东西不是被封装的,包括我们人自己在内。
linuxgyh 2004-08-28
  • 打赏
  • 举报
回复
大家讨论的很是积极,在下很是高兴,谢谢大家!

to steedhorse(晨星)
我所说的不应该和java或者现在有的面向对象语言比,因为现在的语言都是一样的,
c++是很博大,但是今天说的和博大无关,博大是和其他的现在以有的语言相比。
我们应该有发展的眼光去看问题,我要说的是 c++应该彻底再发展一下,但不是现在的java等语言!希望是一个没有盔甲的武者,而不是一个全身盔甲的*#¥%……—

earthharp 2004-08-28
  • 打赏
  • 举报
回复
没有任何东西是完美的
枪就是枪
刀就是刀
看你需要用哪样
你如果喜欢用枪来切菜
那也没有关系
linuxgyh 2004-08-28
  • 打赏
  • 举报
回复
to earthharp(我老子是土匪

我正在找适合我的方法,但是我还是觉得c++很好,虽然不是完美的!

linuxgyh 2004-08-28
  • 打赏
  • 举报
回复
to frankzhang123

人们不要定要真正的圆,但是自从有了规尺,人们就用真正的圆(规尺画的圆方)去代替自己想要的圆,我想也是一种创造力的抹杀吧!
earthharp 2004-08-28
  • 打赏
  • 举报
回复
不封装谈个什么信息隐藏啊
你问这样的问题表示你根本就不需要用类,我估计struct比较适合你
ketop 2004-08-28
  • 打赏
  • 举报
回复
支持一下
加载更多回复(29)

65,186

社区成员

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

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