c++必知必会.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c必知必会

条款1 数据抽象 “类型”是一组操作,“抽象数据类型”则是一组具有某种实现在的操作。当我们在某个问题领域中识别对象时,首选考虑的问题是“可以用这个对像来做什么”而不是“这个对象是如何实现的”。因此,如果某个问题的自然描述涉及的雇员、合同和薪水记录,那么用来解决该问题的编程语言就应该包含Employee、Contract和PayrollRecord类型。这样就允许在问题领域和解决方案领域之间进行双向、高效地转换,用这种方式编写的软件才能尽量避免产生“转换噪音”,从而达到更简洁、更准确。 在C++这样的通用编程语言中,不会有像Employee这样特定于应用程序的类型,我们有更好的东西:C++为创建复杂的抽象数据类型提供了便利。从本质上说,抽象数据类型的用途在于将编程语言扩展到一个特写的问题领域。 C++中不存在针对抽象数据类型设计的公认方案,这方面的编程依然需要灵感和艺术才能,不过许多成功的途径都遵循下面这组类似的步骤。 为类型选择一个描述性的名字。如果难以为这个类型命名,那就说明你还不知道你想要实现什么,你需要开动脑筋。一个抽象数据类型应该表示一个单纯的、有着良好定义的概念,而且为该概念所取的名字应该是显而易见的。 列出类型所能执行的操作。定义一个抽象数据类型的依据是能用它做什么。不要忘了初始化(构造函数)、清理(析构函数)、复制(复制操作)以及转换(不带explicit关键字修饰的单参数构造函数和转换操作符)。要避免在实现时简单地为数据成员提供一串get/set(获取/设置)操作-----那不叫数据抽象,而是懒惰且缺乏想象力的表现。 为类型设计接口。正如Scott Meyers告诉我们的那样,一个类型应该做到“易于正确使用、难以错误使用”。既然抽象数据类型是对语言的扩展,那么务必要正确地进行语言设计。你要为类型的用户设身处地地想一想,并且编写一些使用类型接口的代码。良好的接口设计除需考虑技术的威力外,心理学和情感方面的问题同样需要加以考虑。 实现类型。不要让实现影响类型的接口。要实现类型的接口所承诺的约定。记住,在大多数情况下,对抽象数据类型的实现和改动,远比对其接口的改动来的频繁。 Fiftymetre 打于2006-4-4 凌晨1.26  书的名字叫做”C++必知必会”我会每天打一章出来的,一共63章。 ^_^表怀疑偶是托啊。。。。您就当我只是为了实现我申请版主时的承诺吧。。。( 祝大家可以学到东西 条款2 多态 多态((Option price() update() /\ /\ / \ AmOption EurOption Price() price() 图2 一个多态的承包者及其“转包者” 举个例子,如果Option具有一个纯虚成员函数price,其作用是给出Option的当前值,那么AmOption和EurOption都必须实现这个函数。我们显然不会为这两种类型的Option实现完全一致的行为,但它们都应该计算并返回一个价格(price),而不应该去拔打一个电话或打印一份文件。 另一方面,如果我要去访问同一个对象的两种不同接口的price函数,那么我们应该得到相同的结果。就本质而言,每一个调用都应该绑定到同一个函数: AmOption *d = new AmOption; Option *b = d; d-price(); //如果一个调用的是AmOption::price…………… b-price(); //……那么这一个也应该如此! 这是有意义的(在高级面向对象编程中,竟然有如此之多的基本常识被费解的语法所掩盖)。假如我问你“那个美国期权的当前值是什么?”,我期望得到与以下简短提问方法相同的答案:“那个期权的当前值是什么?” 当然,同样的推理也适用于对象的非虚拟函数: b-updata() ; //如果这一个调用的是Option::updata……. d-updata() ; //……那么这一个也是如此! 正是基类提供的契约允许针对基类接口编写的“多态”代码对特定的期权起作用,同时有助于对派生类的存在保持“健康的不知情”。换句话说,多态代码可能正在操纵AmOption和EurOption对象,但除非特别关心它们到底是什么对象,否则均被视作Option对象。各种各样“具体的”Option类型可以被添加或删除而不会影响到

文档评论(0)

6358999 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档