社区
C++ 语言
帖子详情
类,我有点不明白你?########################星级大狭请发言!
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)
题解|#lanqiao 斤斤计较的小z# 字符串Hash模板
1.为什么做测试开发?#offer# #offer选择# 本人老家浙江嘉兴,现在已经签了百度小度的测开三方了,薪资20×16,浙江嘉兴移动的offer在家这边年包20w,想着要不要毁。#24届通信硬件秋招薪资爆料# 总包就是工资加绩效,基本工资比较低,主要就是靠绩效,吸引我的地方就是他给我北京户口,然后还管吃管住,但是附近的房价不便宜,差不多。今年广汽研究院到底招不招人啊,周围一圈人投了没一个有反应的,有没有知道情况的大佬说一说 #晒一晒我的offer# #理想# #小鹏# #蔚来# #吉利# #广汽。
C++中连接符#/##的作用
宏定义中的井号 1)# 只在有参数的定义时用到,为把参数产开并转化成字符串即用""引起来。里面的空格分割全部改为一个,并且会自动添加转义字符'\' 2)##可以用于有无参数都行。它作用就是把##前后连个东西连起来形成新的标示符。 3)#@和#
类
似,只不过是用''引起来。 考虑下面的宏 #define stringer( x ) printf( #x "\n" )
this()与super()在构造方法中的区别?
1. 访问属性或方法: this. 访问的是本
类
中的属性和方法,如果本
类
没有,向上访问父
类
的; super. 只能访问父
类
的属性和方法。 2. 调用构造方法: 调用本
类
的构造方法,this() 必须放在构造方法的首行; 调用父
类
的构造方法,super() 必须放在子
类
构造方法的首行。 ##疑问:子
类
不继承父
类
的构造方法的啊!!??## 3. 通常都知道 ...
再读 Laravel 5.5 文档
本文档前言 Laravel 文档写的很好,只是新手看起来会
有点
吃力,需要结合经验和网上的文章,多读、细读才能更好的理解。Again,多读、细读官方文档。本文
类
似于一个大纲,欲知其中详情,且去细读官方文档:Laravel 5.5 docs。
########################
########################
####################...
Laravel 6.0
Laravel 学习交流 QQ 群:375462817 本记录文档前言 Laravel 文档写的很好,只是新手看起来会
有点
吃力,需要结合经验和网上的文章,多读、细读才能更好的理解。多读、细读官方文档!!!本文
类
似于一个大纲,欲知其中详情,且去细读官方文档:Laravel 6.0 docs。
########################
########################
##...
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章