登陆论坛 找回密码 立刻获得20pp! 地图 帮助
宽带山生活
版主:saliven 麦克 银河 

<< [1] 2 >>  [只看楼主]  [加入关注] 点击:590 回复:56 已被0人关注

主题:关于C++里的public和private

番茄
725 55

来自:上海
注册:2001-08-12
发帖:143+1581 
活动内容:
  引用:

所谓公有,就是外部可以访问的数据或执行的操作。比如一个人的身高(数据)是可以较直接地获得的,一个人吃东西(操作)是可以受外部控制的。私有就是外部不能直接访问的数据或执行的操作。比如一个人的心跳次数(数据)和消化过程(操作),虽然他们都是客观存在,但我们却不能直接地获取心跳数据或控制消化过程。

如果一个类的所有数据和操作都是公有的,那么它将完全暴露在外,同结构一样没有安全性。如果一个类的所有数据和操作都是私有的,那么它将完全与外界隔绝,这样的类也没有存在的意义。


各位C++达人看看这样的描述有什么问题么?我觉得我已经把我的意思讲清楚了啊……downloading

看过我写的东西的朋友提出意见,只要的确是我有写错的地方,哪怕骂我几句都没关系,因为的确是我写错了。

看了我写的东西但是没有看完整,断章取义的,我深表理解,并感谢您能关注我的作品。

对于那些看也没看就妄加评论的,我只好downloading送您一个大downloading

downloadingdownloadingdownloading

该贴剩余积分:0分,已分配:10分!

已获奖励的人员:
fdxx_13_胖大海(1分)
xuhao75_烟卷儿(1分)
sunnybea_瘋狂的小熊(1分)
su_520_இ(1分)
mynightelf_无尽的混乱(2分)
wchcastle_瓦啦瓦啦(2分)
izual_Justin.CHG(2分)



获网友奖分50点(等于2点PP)  [详细记录]
-------------------------------------------------------------------------------------------
《易学C++》已由人民邮电出版社出版
http://www.tomatostudio.net.cn/
优惠订购《易学C++》网址
http://www.china-pub.com/39862

发表于:2008-05-11 11:40:24
推荐:牙齿有问题,您找我! ...楼主...

19 7

来自:上海
注册:2008-04-22
发帖:5+943 
downloadingdownloading


LZ散我点pp吧



-------------------------------------------------------------------------------------------
人生就像大便
有時候努力了半天
出來的卻只是一個屁。

发表于:2008-05-11 11:40:45

烟卷儿
82 175

来自:上海
注册:2008-02-22
发帖:31+2060 
downloadingdownloading



-------------------------------------------------------------------------------------------
F水不流外人田!

发表于:2008-05-11 11:41:22

1438 8

来自:上海
注册:2002-07-04
发帖:1392+32090 
这个比喻有点。。。



-------------------------------------------------------------------------------------------
crazy bear...

发表于:2008-05-11 11:41:40
推荐:kds红日官网启动啦!!!   [奖励PP] ...第3楼...

&#2951;&#3
1310 73

来自:上海
注册:2004-01-04
发帖:546+6443 
downloadingdownloadingdownloading书店有卖的么?



-------------------------------------------------------------------------------------------
知道什么是死,才能够更好的活
su_520@hotmail.com

发表于:2008-05-11 11:42:08

19 8

来自:上海
注册:2008-04-22
发帖:5+944 
downloading谢谢LZ...虽然没看过你的作品



-------------------------------------------------------------------------------------------
人生就像大便
有時候努力了半天
出來的卻只是一個屁。

发表于:2008-05-11 11:45:24

65 295

来自:上海
注册:2008-02-26
发帖:3+2586 
downloadingdownloadingdownloadingdownloading顶楼主



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 11:46:04

无尽的混乱
552 15

来自:海外
注册:2006-06-04
发帖:43+985 
一个类,所有的方法和变量都是私有的,也是有意义的。
一些核心的类,就是这样的,实例化后,所有的操作都是类内部自动完成的。比如监视器,队列调整等等



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 11:46:04
推荐:S*H*E你是卖艺还是卖色!   [奖励PP] ...第7楼...

莋兯
123 87

来自:上海
注册:2006-08-11
发帖:133+5568 
还是买点相关的书看看



-------------------------------------------------------------------------------------------
少量CDMA无线上网!年卡,季卡!不计漫游费用!每个月使用200小时!需要的PM我!QQ58628144&amp;nbsp;

发表于:2008-05-11 11:46:39

瓦啦瓦啦
804 18

来自:上海
注册:2002-12-16
发帖:103+4950 
例子举的不好
关于public与private的区分一方面是安全性的考虑 另一方面是分割接口与实现 提供弹性
这个例子看不出这样的含义

黑体字部分感觉可以删掉 一来太绝对 二来明白了public与private后很容易推的

cpp书真的不好写 最好是做过很多cpp项目 结合项目进行展开 否则很容易想当然



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 11:46:53
推荐:【车型PK】科鲁兹PK世嘉   [奖励PP] ...第9楼...

2097 0

来自:上海
注册:2001-01-25
发帖:1594+26522 
结构和类有区别?downloadingdownloading



-------------------------------------------------------------------------------------------
Primal eyes

发表于:2008-05-11 11:48:11

Justin.CHG
1352 4

来自:上海
注册:2000-10-17
发帖:131+5388 
事实上,当前的很多语言,都不建议把数据(Field)直接public出来,都通过Method对Field进行封装。进一步可以衍生出Readonly的Field。



-------------------------------------------------------------------------------------------
这个家伙吝啬,什么也没留下......

发表于:2008-05-11 11:49:47

72 42

来自:保密
注册:2008-02-21
发帖:12+313 
downloading



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 11:50:04

65 297

来自:上海
注册:2008-02-26
发帖:3+2590 
帮顶



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 11:50:21

番茄
725 40

来自:上海
注册:2001-08-12
发帖:143+1583 
  引用:
例子举的不好
关于public与private的区分一方面是安全性的考虑 另一方面是分割接口与实现 提供弹性
这个例子看不出这样的含义

黑体字部分感觉可以删掉 一来太绝对 二来明白了public与private后很容易推的

cpp书真的不好写 最好是做过很多cpp项目 结合项目进行展开 否则很容易想当然


谢谢,只好期待第二版的时候的改进了。downloading



获网友奖分21点(等于1点PP)  [详细记录]
-------------------------------------------------------------------------------------------
《易学C++》已由人民邮电出版社出版
http://www.tomatostudio.net.cn/
优惠订购《易学C++》网址
http://www.china-pub.com/39862

发表于:2008-05-11 11:50:49

Ryan
921 33

来自:上海
注册:2005-02-14
发帖:43+4780 
定义下的太绝对,后面黑体字与其在解释一边,不如找个现实的例子说一下,比如7L的



-------------------------------------------------------------------------------------------
AMD X2 5000+
TR U120E
ASUS M3A32-MVP Deluxe
创建 DDR800 2G*2
QCH 2400XT&amp;nbsp;

发表于:2008-05-11 11:53:19
推荐:长期更新,从懂事到现在   [奖励PP] ...第15楼...

52 0

来自:上海
注册:2008-03-20
发帖:9+276 
我觉得可以了
PROTECT估计你会写DNA遗传
懂的人肯定看得懂,不懂的人理解起来还是有点困难
LZ PM我一下联系方式



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 11:53:21

19 9

来自:上海
注册:2008-04-22
发帖:5+948 
  引用:

引用:
例子举的不好
关于public与private的区分一方面是安全性的考虑 另一方面是分割接口与实现 提供弹性
这个例子看不出这样的含义

黑体字部分感觉可以删掉 一来太绝对 二来明白了public与private后很容易推的

cpp书真的不好写 最好是做过很多cpp项目 结合项目进行展开 否则很容易想当然

谢谢,只好期待第二版的时候的改进了。downloading


加油吧downloading我看好你哟downloading



-------------------------------------------------------------------------------------------
人生就像大便
有時候努力了半天
出來的卻只是一個屁。

发表于:2008-05-11 11:53:27

圆规㊣
3510 339

来自:上海
注册:2001-02-05
发帖:1491+22104 
downloading



-------------------------------------------------------------------------------------------
M &amp;euml; a C ú l p a

发表于:2008-05-11 11:54:23

番茄
725 43

来自:上海
注册:2001-08-12
发帖:143+1584 
  引用:
定义下的太绝对,后面黑体字与其在解释一边,不如找个现实的例子说一下,比如7L的

7L的例子我可以理解,特别在操作系统之类的情况下应该要有非常好的安全性。但是,对于一个连对象是什么都还搞不清楚的,和他们说这些例子,有用么?downloading
我的定位还是基础普及教程,只要能先接受概念就达到了主要的目的。至于更深入地理解,那是以后的问题。



-------------------------------------------------------------------------------------------
《易学C++》已由人民邮电出版社出版
http://www.tomatostudio.net.cn/
优惠订购《易学C++》网址
http://www.china-pub.com/39862

发表于:2008-05-11 11:56:35

119 9

来自:保密
注册:2007-05-30
发帖:5+341 
downloadingdownloading



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 12:01:39

LG
720 5

来自:海外
注册:2003-12-17
发帖:107+949 
感觉private/public都是没意义的,不如用struct。
即使你给别人lib和.h,private里的东西还是暴露的,改一下h的private为public就可以操作private里面的数据了,有意义吗



-------------------------------------------------------------------------------------------
Everlasting~~~!

发表于:2008-05-11 12:05:45

mj
798 0

来自:上海
注册:2004-06-27
发帖:372+2057 
  引用:
感觉private/public都是没意义的,不如用struct。
即使你给别人lib和.h,private里的东西还是暴露的,改一下h的private为public就可以操作private里面的数据了,有意义吗
一般给dll的吧downloading



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 12:08:13

LG
720 5

来自:海外
注册:2003-12-17
发帖:107+950 
对于DLL来说,用struct 和 class更没有区别了
class还存在对于不同编译器链接的问题



-------------------------------------------------------------------------------------------
Everlasting~~~!

发表于:2008-05-11 12:12:55
推荐:被戴绿帽,心情极度差   [奖励PP] ...第23楼...

mj
798 0

来自:上海
注册:2004-06-27
发帖:372+2058 
  引用:
对于DLL来说,用struct 和 class更没有区别了
downloading维萨



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 12:16:11

233 21

来自:上海
注册:2003-01-01
发帖:15+1999 
黑体字不准确啊,纯private的类继承一下不就有意义了嘛



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 12:16:42

LG
720 5

来自:海外
注册:2003-12-17
发帖:107+951 
7L说的所有方法都是private,应该不可以初始化吧?
即使singleton也是有一个public static的初始化



-------------------------------------------------------------------------------------------
Everlasting~~~!

发表于:2008-05-11 12:17:55
推荐:KDS红日球迷会2010招募公告   [奖励PP] ...第26楼...

LG
720 5

来自:海外
注册:2003-12-17
发帖:107+952 
constrcutor也是private呢?怎么inheritance?



-------------------------------------------------------------------------------------------
Everlasting~~~!

发表于:2008-05-11 12:19:11
推荐:本能寺之变   [奖励PP] ...第27楼...

番茄
725 43

来自:上海
注册:2001-08-12
发帖:143+1586 
  引用:
7L说的所有方法都是private,应该不可以初始化吧?
即使singleton也是有一个public static的初始化

我也想问这个问题downloading



-------------------------------------------------------------------------------------------
《易学C++》已由人民邮电出版社出版
http://www.tomatostudio.net.cn/
优惠订购《易学C++》网址
http://www.china-pub.com/39862

发表于:2008-05-11 12:21:31
推荐:爱尔给我的“重生”   [奖励PP] ...第28楼...

LG
720 5

来自:海外
注册:2003-12-17
发帖:107+953 
所以在OOP范围内,我认为楼主对于全部是private的类是无意义的说法是对的



-------------------------------------------------------------------------------------------
Everlasting~~~!

发表于:2008-05-11 12:21:36

mj
798 0

来自:上海
注册:2004-06-27
发帖:372+2059 
  引用:
所以在OOP范围内,我认为楼主对于全部是private的类是无意义的说法是对的
downloading你指私有继承?



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 12:28:09
推荐:科帕奇SUV俱乐部版主招募   [奖励PP] ...第30楼...

LG
720 5

来自:海外
注册:2003-12-17
发帖:107+954 
如果一个类的所有数据和操作都是私有的,那么它将完全与外界隔绝,这样的类也没有存在的意义。

我同意楼主的这句话,与继承无关。



-------------------------------------------------------------------------------------------
Everlasting~~~!

发表于:2008-05-11 12:31:31

mj
798 0

来自:上海
注册:2004-06-27
发帖:372+2060 
  引用:

引用:
对于DLL来说,用struct 和 class更没有区别了downloading维萨
ls快点回答这个



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 12:33:11

Ricercar
1878 13

来自:上海
注册:2001-05-27
发帖:865+32065 
  引用:
封装是把一个对象的外部特征和内部实现细节分离开来,其它对象可以访问该对象的外部特征,但不能访问其内部实现细节。对象的封装是一种信息隐藏技术,其目的是将对象的使用者与设计者分开。在程序设计中,封装是指将一个数据和与这个数据有关的操作集合在一起,形成一个能动的实体----对象,用户不必知道对象行为的实现细节,只需根据对象提供的外部接口访问对象即可。封装不是面向对象语言所独有的特性,但这种在单一实体中把数据结构和行为捆绑在一起的能力,使封装比传统的把数据结构和行为分离的语言更加清晰、更强有力。



-------------------------------------------------------------------------------------------
ingenuous, right-minded, optimistic, freely, humor, adventurous, visioned

发表于:2008-05-11 12:34:10

番茄
725 43

来自:上海
注册:2001-08-12
发帖:143+1587 
  引用:

引用:
所以在OOP范围内,我认为楼主对于全部是private的类是无意义的说法是对的downloading你指私有继承?

如果基类的成员都是private的,那么无论用什么继承方式,它的派生类都是无法访问这些成员的。(或者我也可以认为这些成员根本没被继承下来)
另外正像LG兄所说,全private的怎么实现初始化啊?



-------------------------------------------------------------------------------------------
《易学C++》已由人民邮电出版社出版
http://www.tomatostudio.net.cn/
优惠订购《易学C++》网址
http://www.china-pub.com/39862

发表于:2008-05-11 12:34:11

feverzsj
903 855

来自:上海
注册:2001-07-06
发帖:1206+15773 
lz何不把cpp的基本经典教科书抄进去些,你这些只是误人子弟
不过作为没有基础的人的入门书籍,可能会有人看看吧downloading



-------------------------------------------------------------------------------------------
少思虑以养心气,寡色欲以养肾气,
常运动以养骨气,戒嗔怒以养肝气,
薄滋味以养胃气,省言语以养神气,
多读书以养胆气,顺时令以养元气。

发表于:2008-05-11 12:35:43

Ricercar
1878 13

来自:上海
注册:2001-05-27
发帖:865+32066 
private成员不能被继承,只有protected成员才行



-------------------------------------------------------------------------------------------
ingenuous, right-minded, optimistic, freely, humor, adventurous, visioned

发表于:2008-05-11 12:36:23
推荐:打造KDS最美贴,刹那芳华   [奖励PP] ...第36楼...

LG
720 5

来自:海外
注册:2003-12-17
发帖:107+955 
对于DLL,你想让别人使用的数据和方法加上__declspec(dllexport),不想使用的就不导出。这是DLL对内部封装的方法,与class和struct 关系不大



-------------------------------------------------------------------------------------------
Everlasting~~~!

发表于:2008-05-11 12:37:24

番茄
725 43

来自:上海
注册:2001-08-12
发帖:143+1588 
  引用:
lz何不把cpp的基本经典教科书抄进去些,你这些只是误人子弟
不过作为没有基础的人的入门书籍,可能会有人看看吧downloading


好吧,这位兄台请描述一下我们正在讨论的问题,用容易让初学者理解的语言讲清楚public和private的问题。
我很期待!downloading



-------------------------------------------------------------------------------------------
《易学C++》已由人民邮电出版社出版
http://www.tomatostudio.net.cn/
优惠订购《易学C++》网址
http://www.china-pub.com/39862

发表于:2008-05-11 12:37:37
推荐:大家对于幼教有什么看法?   [奖励PP] ...第38楼...

227 156

来自:上海
注册:2007-06-07
发帖:109+1759 
同结构一样没有安全性?

这里有问题,
struct在c++中和class类似,也是可以定义属性和方法的。
他们的区别是class默认的是private,struct默认是pubilc的!

不是说struct就是不安全的!



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 12:37:56

9 2

来自:保密
注册:2008-04-27
发帖:4+67 
downloadingdownloading



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 12:38:09

LG
720 5

来自:海外
注册:2003-12-17
发帖:107+956 
private成员可以继承,只是你不能直接操作而已。但是可以间接使用父类的方法操作。



-------------------------------------------------------------------------------------------
Everlasting~~~!

发表于:2008-05-11 12:38:29
推荐:迎新年牙齿美容大行动   [奖励PP] ...第41楼...

233 21

来自:上海
注册:2003-01-01
发帖:15+2001 
写这段不如参考一下<C++ Primer>



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 12:39:17

番茄
725 43

来自:上海
注册:2001-08-12
发帖:143+1589 
  引用:
private成员可以继承,只是你不能直接操作而已。但是可以间接使用父类的方法操作。

同意,这个我验证过,编译器报的错误是禁止访问,而不是“非成员”。所以事实上是被继承的,只是无法用派生类直接访问。



-------------------------------------------------------------------------------------------
《易学C++》已由人民邮电出版社出版
http://www.tomatostudio.net.cn/
优惠订购《易学C++》网址
http://www.china-pub.com/39862

发表于:2008-05-11 12:40:17

LG
720 5

来自:海外
注册:2003-12-17
发帖:107+957 
何不说直接看TCPL,呵呵。
要考虑面向的读者对象



-------------------------------------------------------------------------------------------
Everlasting~~~!

发表于:2008-05-11 12:40:45

番茄
725 43

来自:上海
注册:2001-08-12
发帖:143+1590 
  引用:
同结构一样没有安全性?

这里有问题,
struct在c++中和class类似,也是可以定义属性和方法的。
他们的区别是class默认的是private,struct默认是pubilc的!

不是说struct就是不安全的!

关于C++中的struct可以有方法我也听说过,但是真的没有详细研究。可能有点受钱能的书的影响吧……下一次要看一看。



-------------------------------------------------------------------------------------------
《易学C++》已由人民邮电出版社出版
http://www.tomatostudio.net.cn/
优惠订购《易学C++》网址
http://www.china-pub.com/39862

发表于:2008-05-11 12:42:00

瓦啦瓦啦
804 20

来自:上海
注册:2002-12-16
发帖:103+4951 
  引用:
引用:
lz何不把cpp的基本经典教科书抄进去些,你这些只是误人子弟
不过作为没有基础的人的入门书籍,可能会有人看看吧downloading



好吧,这位兄台请描述一下我们正在讨论的问题,用容易让初学者理解的语言讲清楚public和private的问题。

我很期待!downloading
讲清楚一个概念或者规则
除了叙述其本身之外,其motivation,即为什么要引入这样的机制是必须要说的,所以说书难写啊,THE DESIGN AND EVOLUTION OF C++不可不看

另外,想写一本通俗易懂的技术书籍,head fisrt系列的风格很值得借鉴



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 12:42:52

Ricercar
1878 13

来自:上海
注册:2001-05-27
发帖:865+32067 
  引用:

引用:
private成员可以继承,只是你不能直接操作而已。但是可以间接使用父类的方法操作。
同意,这个我验证过,编译器报的错误是禁止访问,而不是“非成员”。所以事实上是被继承的,只是无法用派生类直接访问。


这个搞不懂了,如果private成员被继承了,那么子类的方法应该可以访问的



-------------------------------------------------------------------------------------------
ingenuous, right-minded, optimistic, freely, humor, adventurous, visioned

发表于:2008-05-11 12:44:58

番茄
725 43

来自:上海
注册:2001-08-12
发帖:143+1591 
  引用:

讲清楚一个概念或者规则
除了叙述其本身之外,其motivation,即为什么要引入这样的机制是必须要说的,所以说书难写啊,THE DESIGN AND EVOLUTION OF C++不可不看

另外,想写一本通俗易懂的技术书籍,head fisrt系列的风格很值得借鉴

很好的建议。我觉得OO里面如果在初学者可以承受的程度上,有必要说一下引入的原因,引发更深层次的思考。



-------------------------------------------------------------------------------------------
《易学C++》已由人民邮电出版社出版
http://www.tomatostudio.net.cn/
优惠订购《易学C++》网址
http://www.china-pub.com/39862

发表于:2008-05-11 12:46:01

瓦啦瓦啦
804 20

来自:上海
注册:2002-12-16
发帖:103+4952 
  引用:

这个搞不懂了,如果private成员被继承了,那么子类的方法应该可以访问的
当然不可以访问
只不过在子类的内存映像中 的确存在父类的private成员

public/private成员 与 public/private继承 相互组合产生的效果可以参考thinking in cpp,事实上各种书里都有,总结一下即可



-------------------------------------------------------------------------------------------
这个家伙很懒,什么也没留下......

发表于:2008-05-11 12:48:40

回复主题 [ 返回宽带山KDS ]
主题: 关于C++里的public和private
手机看宽带山

关于我们 - 联系我们 - 加入我们 - 营销服务 - 友情链接 - 频道合作- PChome Widget
Copyright © 1996-2009 PChome.net All rights reserved. 电脑之家 版权所有