博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《C++面向对象高效编程(第2版)》——1.5 什么可以作为类
阅读量:7224 次
发布时间:2019-06-29

本文共 1111 字,大约阅读时间需要 3 分钟。

本节书摘来自异步社区出版社《C++面向对象高效编程(第2版)》一书中的第1章,第1.5节,作者: 【美】Kayshav Dattatri,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.5 什么可以作为类

C++面向对象高效编程(第2版)

用简单的例子详细讨论类和对象非常容易,但是难点在于如何为给定的问题找出合适的类。我们必须理解类代表什么,何时将问题中的某些部分转化为类,而非数据,反之亦然。根据我们的定义,类拥有一组对象的共同属性(或者特性)。怎样的共同才是共同?何时说这是一个类,而不是另一个类的对象?这些都是我们在学习OOP时会遇到的,和真正关心的问题。

当我们决定创建一个类时,第一个问题就是“是否确实需要这个类的多个实例?”,如果答案为“是”,那么我们的方法就可能正确至少粗略看起来正确。如果发现类的实例之间没有绝对差别(也就是说,每个实例和其他实例相同,而且它们的行为完全一致),那么,我们可能错误地创建了这个类,应该将这个类创建为一个值。例如,如果在处理鲜花问题时将Color作为类,而每种颜色都可以用唯一的数字代表,那么,将Color设计成一个类就毫无意义。但是,如果我们在图形系统中处理颜色(涉及复杂的颜色计算),则必须将Color定义为类,因为基于颜色的组成(红色、绿色和蓝色),每种颜色都具有许多成分和深浅变化。更重要的是,可以通过控制Color的成分来控制颜色。这说明,在图形系统中,Color不仅仅是一个值,它还包含许多依附于它的行为。

再来看看另一个例子,家庭地址(或者Address)可能被看做是字符(或者值)数组。但是,Address在电子邮件系统中可能是一个类,它包括域名、计算机名称等,而且地址还反映了用于消息传送的路由性质。很明显,在这样的系统中,我们不能将地址作为字符数组,它是一个真正的类。

记住,不可能一次设计就能一步到位。在第一轮设计中作为类的部分,可能在第二轮设计中改为数据,反之亦然。解决问题的方案在不断变化,最终的解决方案很可能与最初设计截然不同。

这都源于类的重要特性。类不只是容器,不能认为它仅仅用于存储被函数修改的数据。类为客户提供了复杂实体的简化版本,并允许客户通过操作类的对象完成有用的工作。类不只是将它的各个部分简单地组合起来而已。类决定如何完成任务,它清楚地陈述了该类的对象可以做什么。回顾Color的例子,如果在图形系统中,只有红色、绿色和蓝色,对客户而言意义不大。Color类需要完成的任务是将各种颜色成份组合起来,并为其添加值来表现这些颜色。同理,银行账户不能只包含字符和浮点数字,银行账户类应该允许客户更加方便、安全地管理他们的金钱。

转载地址:http://dneym.baihongyu.com/

你可能感兴趣的文章
SDL_BlitSurface
查看>>
Ubuntu12.04编译Android2.3.4
查看>>
IDA设置函数类型
查看>>
日期控件ie9失效
查看>>
群里一个高手写的url?传参执行php函数的小程序, 收藏下
查看>>
Linux桌面扩展 Docky
查看>>
Android实现图片顺时逆时旋转及拖拽显示效果
查看>>
四款常见数据库比较同步软件汇总
查看>>
java中相同名字不同返回类型的方法
查看>>
北京出dell s2740显示器 1900 - V2EX
查看>>
怎么在VS监视DataSet类型的数据
查看>>
一个Chrome拓展——HttpPost
查看>>
JS事件监听器
查看>>
解决flash web浏览器弹出窗口被拦截的问题
查看>>
easyui资源
查看>>
Xcode: Show Bounds Rectangles for UIView in Interface Builder
查看>>
C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 省市区数据权限的实现效果...
查看>>
Binding的源与路径
查看>>
Android开发之模仿UC浏览器的菜单
查看>>
关于开发的点点滴滴
查看>>