- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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类型可以被添加或删除而不会影响到
您可能关注的文档
最近下载
- 销售提成结算单.docx VIP
- 2022年江苏徐州海关缉私分局警务辅助人员招聘5人考试备考试题及答案解析.docx VIP
- 理解马克思(南京大学)中国大学MOOC 慕课 章节测验 答案.pdf VIP
- 2023年中央财经大学公共课《思想道德基础与法律修养》科目期末试卷B(有答案).docx VIP
- 《公路技术状况评定标准》.pdf VIP
- 操作系统原理与Linux实践教程(申丰山)课后习题答案解析.docx VIP
- 公司收购股权转让法律尽职调查报告律师专业版.pdf
- 国家人民卫生出版社有限公司招聘笔试题库2025.pdf
- 下载仪表设备维护检修规程汇编.doc VIP
- 负压封闭引流技术(VSD)护理PPT课件.pptx VIP
原创力文档


文档评论(0)