Note of Justin

关于工作和读书的笔记

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  47 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

留言簿(14)

搜索

  •  

积分与排名

  • 积分 - 51888
  • 排名 - 433

最新评论

阅读排行榜

评论排行榜

[原创文章欢迎转载,但请保留作者信息]
Justin 于 2009-12-20



大师写到这一章节的时候文风似有明显转变,原因未知,但我更喜欢这章的风格。

如题,Item22的主旨是应该把所有类的数据成员声明为私有(private)。因为:

  • 如果数据成员都是私有的,那么访问这些成员就只能通过函数进行。于是用户就不需要费心考虑到底要用什么方式去访问数据成员:因为只有定义了的函数可以用。
  • 通过定义数据成员为私有,可以实现函数来设计、约束或禁止对这些成员的各种访问(读/写等)。而如果将其设为公有(public),你将无法得知你的成员会被谁改动,也不知道会是怎样的改动。
  • 而更重要的好处是封装(encapsulation):可以方便的通过修改函数来改变成员的访问方式;在成员被访问时通知其他对象;实现多线程中的同步等等。
    封装的好处究其本质,是通过对用户隐藏数据成员来保证类行为的一致性(class invariant)。因为接口被成员访问函数限制了,类的作者也为自己日后修改类的实现留了后路:如果所有的成员都是公有的,对任何代码的修改都有可能影响到外界的使用。(因此Scott说“Public means unencapsulated, and practically speaking, unencapsulated means unchangeable, especially for classes that are widely used.”)

那么可不可以声明为保护(protected)呢?其实道理和前面的公有是一样的。公有的成员对类的外部完全开放,而保护的成员对类的继承者完全开放。这个就像两个区间:(-infinity, +infinity) 和 (0, +infinity),两者的大小是一样的。

接下来大师的一句话有击中要害:从分装的角度,只有两种访问级别:私有,及其他。

posted on 2010-01-08 08:03 Justin.H 阅读(1362) 评论(-1)  编辑 收藏 引用 所属分类: Effective C++ 炒冷饭

Feedback

# re: Effective C++ 炒冷饭 - Item22 请把数据成员声明为私有 2010-01-08 17:13 太垃圾了
你天天写这东西累不?有什么用,真是无语~~顺便问一句“炒冷饭”啥意思,真  回复  更多评论
  

# re: Effective C++ 炒冷饭 - Item22 请把数据成员声明为私有 2010-01-08 21:46 Justin.H
以前学过的东西,重新复习。炒冷饭的意思大概就是这样。
为什么要写这些在第一篇日志和标题里应该也说清楚了的,不累,真D
至于有没有用嘛,仁者见仁智者见智了,呵呵  回复  更多评论
  

# re: Effective C++ 炒冷饭 - Item22 请把数据成员声明为私有 2010-01-09 12:46 匿名
支持楼主,我都看了,呵呵,懒得看书。  回复  更多评论
  

# re: Effective C++ 炒冷饭 - Item22 请把数据成员声明为私有 2010-01-20 10:08 Goteet
那个复习吧,不过能不能别申请公布在主页上,我们也可以通过最新随笔找到的。  回复  更多评论
  

# re: Effective C++ 炒冷饭 - Item22 请把数据成员声明为私有 2010-01-20 11:32 Justin.H
@Goteet
谢谢提醒~
之前有同志建议我放在主页上,于是我就试着放在这里了。
后面的笔记我会发布在别处的,呵呵。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理