加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 C++书籍

C++书籍

C++书籍

mailli2008
2011-11-08 0人阅读 举报 0 0 暂无简介

简介:本文档为《C++书籍pdf》,可适用于工程科技领域

深入系列Primer第三版著中中文文版版潘爱民张丽译AddisonWesley中国电力出版社wwwinfopowercomcnStanleyBLippmanJoséeLajoie译序这是我心仪已久的一本书我相信很多读者也有同样的感受在所有的编程语言中C可以说是最为复杂的它既是一门传统的编程语言也是一门新的编程语言说它是一门传统语言是因为C诞生已将近年的历史了特别是最近年来C得到了快速的发展C是计算机软件领域中覆盖面最为广阔的编程语言并且与C相关的智力投入也是其他任何一门语言所无法比拟的人们对于C的研究已经远远超出了对于一门编程语言所应有的关注所以现在的C已经非常成熟有大量的资源文档书籍源代码等等可供我们使用说C是一门新的编程语言是因为在年C由ISOInternationalStandardsOrganization完成了标准化从此C领域有了统一的标准所有的编译器都将向标准靠拢或者说与标准兼容这有利于我们写出可移植的C代码来同时C标准也统一了C标准库为C用户提供了最为基本的基础设施C经历了多年的发展终于有了一个相对稳定的版本所以我们应该用一种新的眼光来看待C而不再简单地把C认为是C语言的超集本书正是新版本C的写照通过本书你可以重新审视C语言这是我翻译过程中最为真切的体会它纠正了我过去对于C语言的一些误解虽然我从年开始就一直在使用C但是直到阅读了这本书之后我才从真正意义上全面地认识了C语言本书的权威性无需我多说看看本书原著的前言了解了两位作者的背景之后你就可以知道这本书是经验和标准的完美结合StanleyLippman从年开始一直从事C方面的工作在C的实现与应用方面有着丰富的经验本书前两个版本的成功也证明了他在阐释C语言方面的独到之处JoséeLajoie从年开始成为C标准委员会的一名成员并且承担了很重要的职务由于她的参与毫无疑问本书一定是与标准兼容的讲述C的书非常多并且不乏优秀和经典之作在如此众多的C书籍中本书仍具有不可替代的地位我想主要的原因在于本书具有以下几个特色l内容广阔从本书的规模厚度就可以看出这一点C语言融入了大量优秀的特性其内容的丰富程度已经远非C语言所能及在所有的C书籍中本书的覆盖面是最为广阔的从最基本的C程序设计到面向对象程序设计以及基于模板的程序设计面面俱到而且讲解细致入微值得仔细品味许多实际的范例程序纯粹的技术讲解总是非常枯燥的但是阅读本书并不感觉枯燥因为作者在介绍每一部分内容的时候都结合一个实际的例子读者通过这些例子能够很容易地掌握相应的技术要点并且看到每一种技术的实际用法这是本书之所以引人入胜的重要原因之一叙述内容的安排C是一门多风格的程序设计语言multiparadigmProgramminglanguage不仅支持面向对象程序设计也支持其他的程序设计思想本书的叙述结构正体现了C的这种特点作者从程序设计思想的角度分别讲述了C的各种语言要素便读者比较II译序容易抓住C语言的本质特征与编译器无关遵从C标准本书的内容并不特定于某一个C编译器实现而是适用于所有与C标准兼容的编译器作者在讲解过程中也指出了编译器的一些内部考虑例如编译器如何在各种上下文环境中解析重载函数如何处理除式类型转换等等这些内容有利于加深读者对C的理解配套的练习在每一节讲解之后作者给出了一些练习这些练习反映了这一节的中心内容读者通过这些练习可以巩固所学的知识所以本书也可以被用作教材用于系统全面地学习C语言虽然本书书名CPrimer的中文含义是C初级读本但是它绝对不是一本很轻松的入门教材特别是关于名字空间函数重载解析过程模板机制和泛型算法genericalgorithms等内容并不是一个C初学者能够很快掌握的如果你以前没有看过其他的C书籍那么可能需要反复阅读多遍才能掌握本书讲述的内容如果你已经有了C的基础比如已经看过其他的C入门书籍那么阅读本书可以让你快速掌握C的要点如果你是一名有多年C实践经验的程序员那么阅读本书可以让你重新理解C总之这是一本很好的学习和参考书籍值得你反复阅读但是正如书名所指示的它不是一本高级书籍按照我个人理解它的技术水准应该在中等偏深一点的层次上本书的翻译工作由我和张丽共同完成张丽完成了初稿的翻译工作我做了第二遍翻译检查工作书中每一句话我都认真检查过个别地方还修改了原著的一些错误C中有些术语还没有统一的中文说法对于这些术语的处理我们尽可能地做到符合中文的语言习惯读者可以参考本书最后所附的英汉对照索引这份索引是由中国电力出版社的诸位编辑手工制作完成的他们是刘江朱恩从陈维宁程璐关敏刘君夏平宋宏姚贵胜常虹乔晶阎宏感谢他她们的辛勤劳动在翻译过程中不断收到读者来信或者来电询问这本书的出版情况我理解读者对于一本好书的迫切心情我的想法是有关C的书籍和资料如此之多所以学习C不一定非要阅读这本书但是它可以加快你学习的步伐并且帮助你深入而全面地理解C既然你已经看到了这本书那就不要错过吧这本书不会让你失望的我坚信这一点潘爱民北京大学燕北园前言本书第二版和第三版之间的变化非常大其中最值得注意的是C已经通过了国际标准化这不但为语言增加了新的特性比如异常处理运行时刻类型识别RTTI名字空间内置布尔数据类型新的强制转换方式而且还大量修改并扩展了现有的特性比如模板template支持面向对象objectoriented和基于对象objectbased程序设计所需要的类class机制嵌套类型以及重载函数的解析机制也许更重要的是一个覆盖面非常广阔的库现在成了标准C的一部分其中包括以前称为STL标准模板库的内容新的string类型一组顺序和关联容器类型比如vectorlistmap和set以及在这些类型上进行操作的一组可扩展的泛型算法genericalgorithm都是这个新标准库的特性本书不但包括了许多新的资料而且还阐述了怎样在C中进行程序设计的新的思考方法简而言之实际上不但C已经被重新创造本书第三版也是如此在第三版中不但对语言的处理方式发生了根本的变化而且作者本身也发生了变化首先我们的人数已经加倍而且我们的写作过程也已经国际化了尽管我们还牢牢扎根于北美大陆StanLippman是美国人JoséeLajoie是加拿大人最后这种双作者关系也反映了C团体的两类主要活动Stan现在正在迪斯尼动画公司WaltDisneyFeatureAnimation*致力于以C为基础的D计算机图形和动画应用而Josée正专心于C的定义与实现同时她也是C标准的核心语言小组的主席**以及IBM加拿大实验室的C编译器组的成员Stan是Bell实验室中与BjarneStroustrupC的发明者一起工作的早期成员之一从年开始一直从事C方面的工作Stan曾经致力于原始C编译器cfront的各种实现从年的版本到版本并领导了和版本的开发组之后他参与了Stroustrup领导的FoundationResearchProject项目中关于程序设计环境的对象模型部分Josée作为IBM加拿大实验室C编译器组的成员已经有八年时间了从年开始她成为C标准委员会的成员她曾经担任委员会的副主席三年日前担任核心语言小组委员会的主席已经达四年之久本书第三版是一个大幅修订的版本不仅反映了语言的变化和扩展也反映了作者洞察力和经验的变化*StanLippman现已受雇于Microsoft成为VisualCNet的架构设计师**JoséeLajoie现正在滑铁卢大学攻读硕士学位已不再担任该委员会的主席现任主席为Sun公司的SteveClamageIV译序本书的结构本书为C国际标准进行了全面的介绍在此意义上它是一个初级读本primer它提供了一种指导性的方法来描述C语言但是它也为C语言提供了一种简单而温和的描述从这个角度来看它不是一本初级读物C语言的程序设计要素比如异常处理容器类型面向对象的程序设计等等都在解决特定问题或程序设计任务的上下文环境中展示出来C语言的规则比如重载函数调用的解析过程以及在面向对象程序设计下支持的类型转换本书都有广泛的论述这似乎超出了一本初级读本的范畴我们相信为了加强读者对于C语言的理解覆盖这些内容是必要的对于这些材料读者应该不时地回头翻阅而不是一次消化了事如果开始的时候你发现这些内容比较难以接受或者过于枯燥请把它们放到一边以后再回头来看我们为这样的章节加上了特殊的记号阅读本书不需要具备C语言的知识但是熟悉某些现代的结构化语言会使学习进展更快一些本书的意图是作为学习C的第一本书而不是学习程序设计的第一本书为了确保这一点我们会以一个公共的词汇表作为开始然而开始的章节涵盖了一些基本的概念比如循环语句和变量等有些读者可能会觉得这些概念太浅显了不必担心深层的内容很快就会看到C的许多威力来自于它对程序设计新方法的支持以及对程序设计问题的思考方式因此要想有效地学习使用C不要只想简单地学会一组新的语法和语义为了使这种学习更加容易本书将围绕一系列可扩展的例子来组织内容这些例子被用来介绍各种语言特性的细节同时也说明了这些语言特性的动机所在当我们在一个完整例子的上下文环境中学习语言特性时对这些特性为什么会有用处也就变得很清楚了它会使我们对于何时以及怎样在实际的问题解决过程中使用这些特性有一些感觉另外把焦点放在例子上可使读者能够尽早地使用一些概念随着读者的知识基础被建立起来之后这些概念会进一步完整地解释清楚本书前面的例子含有C基本概念的简单用法读者可以先领略一下C中程序设计的概貌而不要求完全理解C程序设计和实现的细节第章和第章形成了一个独立完整的C介绍和概述第一篇的目的是使我们快速地理解C支持的概念和语言设施以及编写和执行一个程序所需要的基础知识读完这部分内容之后你应该对C语言有了一些认识但是还谈不上真正理解C这就够了那是本书余下部分的目的第章向我们介绍了语言的基本元素内置数据类型变量表达式语句以及函数它将介绍一个最小的合法的C程序简要讨论编译程序的过程介绍所谓的预处理器preprocessor以及对输入和输出的支持它给出了多个简单但却完整的C程序鼓励读者亲自编译并执行这些程序第章介绍了C是如何通过类机制为基于对象和面向对象的程序设计提供支持的同时通过数组抽象的演化过程来说明这些设计思想另外它简要介绍了模板名字空间异常处理以及标准库为一般容器类型和泛型程序设计提供的支持这一章的进度比较快有些读者可能会觉得难以接受如果是这样我们建议你跳过这一章以后再回过头来看它C的基础是各种设施它们使用户能够通过定义新的数据类型来扩展语言本身这些V译序新类型可以具有与内置类型一样的灵活性和简单性掌握这些设施的第一步是理解基本语言本身第章到第章第二篇在这个层次上介绍了C语言第章介绍了C语言预定义的内置和复合数据类型以及C标准库提供的stringcomplexvector类数据类型这些类型构成了所有程序的基石第章详细讨论了C语言支持的表达式比如算术关系赋值表达式语句是C程序中最小的独立单元它是第章的主题C标准库提供的容器类型是第章的焦点我们不是简单地列出所有可用的操作而是通过一个文本查询系统的实现来说明这些容器类型的设计和用法第章到第章第三篇集中在C为基于过程化的程序设计所提供的支持上第章介绍C函数机制函数封装了一组操作它们通常形成一项单一的任务如print()名字后面的括号表明它是一个函数关于程序域和变量生命期的概念以及名字空间设施的讨论是第章的主题第章扩展了第章中引入的关于函数的讨论介绍了函数的重载函数重载允许多个函数实例它们提供一个公共的操作共享一个公共的名字但是要求不同的实现代码例如我们可以定义一组print()函数来输出不同类型的数据第章介绍和说明函数模板的用法函数模板为自动生成多个函数实例可能是无限多个提供了一种规范描述prescription这些函数实例的类型不同但实现方式保持不变C支持异常处理设施异常表示的是一个没有预料到的程序行为比如所有可用的程序内存耗尽出现异常情况的程序部分会抛出一个异常即程序的其他部分都可以访问到程序中的某个函数必须捕获这个异常并做一些必要的动作对于异常处理的讨论跨越了两章第章用一个简单的例子介绍了异常处理的基本语法和用法该例子捕获和抛出一个类类型classtype的异常因为在我们的程序中实际被处理的异常通常是一个面向对象类层次结构的类对象所以关于怎样抛出和处理异常的讨论一直继续到第章也就是在介绍面向对象程序设计之后第章介绍标准库提供的泛型算法集合看一看它们怎样和第章的容器类型以及内置数组类型互相作用这一章以一个使用泛型算法的程序设计作为开始第章介绍的iterator迭代器在第章将进一步讨论因为它们为泛型算法与实际容器的绑定提供了粘合剂这一章也介绍并解释了函数对象的概念函数对象使我们能够为泛型算法中用到的操作符比如等于或小于操作符提供另一种可替换的语义关于泛型算法在附录中有详细说明并带有用法的示例第章到第章第四篇的焦点集中在基于对象的程序设计上即创建独立的抽象数据类型的那些类设施的定义和用法通过创建新的类型来描述问题域C允许程序员在写应用程序时可以不用关心各种乏味的簿记工作应用程序的基本类型可以只被实现一次而多次被重用这使程序员能够将注意力集中在问题本身而不是实现细节上这些封装数据的设施可以极大地简化应用程序的后续维护和改进工作第章集中在一般的类机制上怎样定义一个类信息隐藏的概念即把类的公有接口同私有实现分离以及怎样定义并封装一个类的对象实例这一章还有关于类域嵌套类类作为名字空间成员的讨论第章详细讨论C为类对象的初始化析构以及赋值而提供的特殊支持为了支持这些特殊的行为需要使用一些特殊的成员函数分别是构造函数析构函数和拷贝赋值操作符这一章我们还将看一看按成员初始化和拷贝的主题即指一个类对象被初始化为或者VI译序赋值为该类的另一个对象以及为了有效地支持按成员初始化和拷贝而提出的命名返回值namedreturnvalue扩展第章将介绍类特有的操作符重载首先给出一般的概念和设计考虑然后介绍一些特殊的操作符如赋值下标调用以及类特有的new和delete操作符这一章还介绍了类的友元它对一个类具有特殊的访问特权及其必要性然后讨论用户定义的转换包括底层的概念和用法的扩展实例这一章还详细讨论了函数重载解析的规则并带有代码示例说明类模板是第章的主题类模板是用来创建类的规范描述其中的类包含一个或多个参数化的类型或值例如一个vector类可以对内含的元素类型进行参数化一个buffer类可以对内含的元素类型以及缓冲区的大小进行参数化更复杂的用法比如在分布式计算中IPC接口寻址接口同步接口等都可以被参数化这一章讨论了怎样定义类模板怎样创建一个类模板特定类型的实例怎样定义类模板的成员成员函数静态成员和嵌套类型以及怎样用类模板来组织我们的程序最后以一个扩展的类模板的例子作为结束面向对象的程序设计和C的支持机制是第和章第五篇的主题第章介绍了C对于面向对象程序设计主要要素的支持继承和动态绑定在面向对象的程序设计中用父子关系也称类型子类型关系来定义有共同行为的各个类类不用重新实现共享特性它可以继承了父类的数据和操作子类或者子类型只针对它与父类不同的地方进行设计例如我们可以定义一个父类Employee以及两个子类型TemporaryEmpl和Manager这些子类型继承了Employee的全部行为它们只实现自己特有的行为继承的第二个方面称为多态性是指父类型具有引用由它派生的任何子类型的能力例如一个Employee可以指向自己的类型也可以指向TemporaryEmpl或者Manager动态绑定是指在运行时刻根据多态对象的实际类型来确定应该执行哪个操作的解析能力在C中这是通过虚拟函数机制来处理的第章介绍了面向对象程序设计的基本特性这一章说明了如何设计和实现一个Query类层次结构用来支持第章实现的文本查询系统第章介绍更为复杂的继承层次结构多继承和虚拟继承机制使得这样的层次结构成为可能这一章利用多继承和虚拟继承把第章的模板类例子扩展成一个三层的类模板层次结构第章介绍RTTI运行时刻类型识别设施使用RTTI我们的程序在执行过程中可以查询一个多态类对象的类型例如我们可以询问一个Employee对象它是否实际指向一个Manager类型另外第章回顾了异常处理机制讨论了标准库的异常类层次机构并说明了如何定义和处理我们自己的异常类层次结构这一章也深入讨论了在继承机制下重载函数的解析过程第章详细说明了如何使用C的iostream输入输出库它通过例子说明了一般的数据输入和输出说明了如何定义类特有的输入输出操作符实例如何辨别和设置条件状态如何对数据进行格式化iostream库是一个用虚拟继承和多继承实现的类层次结构本书以一个附录作为结束附录给出了每个泛型算法的简短讨论和程序例子这些算法按字母排序以便参考最后我们要说的是无论谁写了一本书他所省略掉的往往与他所讲述的内容一样VII译序重要C语言的某些方面比如构造函数的工作细节在什么条件下编译器会创建内部临时对象或者对于效率的一般性考虑虽然这些方面对于编写实际的应用程序非常重要但是不适合于一本入门级的语言书籍在开始写作本书第三版之前StanLippman写的InsidetheCObjectModel参见本前言最后所附的参考文献中的LIPPMANa包含了许多这方面的内容当读者希望获得更详细的说明特别是讨论基于对象和面向对象的程序设计时本书常常会引用该书中的讨论本书故意省略了C标准库中的某些部分比如对本地化和算术运算库的支持C标准库非常广泛要想介绍它的所有方面则远远超出了本书的范围在后面所附的参考文献中某些书更详细地讨论了该库见MUSSER和STROUSTRUP我们相信在这本书出版之后一定还会有更多的关于C标准库各个方面的书面世第三版的变化本书第三版的变化主要是以下四个方面涵盖了语言所增加的新特性异常处理运行时刻类型识别名字空间内置bool类型新风格的类型强制转换涵盖了新的C标准库包括complex和string类型autoptr和pair类型顺序容器和关联容器类型主要是listvectormapset容器以及泛型算法对原来的文字作了调整以反映出标准C对原有语言特性的精炼变化以及扩展语言精炼的一个例子是现在能够前向声明一个嵌套类型这在以前是不允许的语言变化的一个例子是一个虚拟函数的派生类实例能够返回一个基类实例的返回类型的派生类这种变化支持一个被称为clone或factory的方法关于clone()虚拟函数见节说明对原有语言特性进行扩展的一个例子是现在可以显式地指定一个函数模板的一个或多个模板实参实际上模板已经被大大地扩展了差不多已经成为一个新特性加强了对C高级特性的处理和组织方式尤其是对于模板类以及面向对象程序设计这几年Stan从一个相对较小的C提供者团体转到了一般的C用户团体这种影响使他相信越是深入地了解问题则程序员越是能够高明地使用C语言因此在第三版中许多情况下我们已经把焦点转移到如何更好地说明底层特性的概念以及怎样最好地使用它们并在适当的时候指出应该避免的潜在陷阱C的未来在出版这本书的时候ISOANSI标准委员会已经完成了C第一个国际标准的技术工作该标准已于年的夏天由ISO公布C标准公布之后支持标准C的C编译器实现出将很快会推出随着标准的公布C语言的进化将会稳定下来这种稳定性使得以标准C编写的复杂的程序库可以被用来解决工业界特有的问题因此在C世界中我们将会看到越来越多的C程序库一旦标准被公布标准委员会仍然会继续工作当然步伐会慢下来以解决C标准的用户所提出的解释请求这会导致对C标准作一些细微的澄清和修正如果需要国际VIII译序标准将会每五年修订一次以考虑技术的变化和工业界的需要C标准公布五年之后将会发生什么事情我们还不知道有可能是一个被工业界广泛使用的新库组件将被加入到C标准库的组件集中但是到现在为止面对C标准委员会已经完成的工作C的命运就全掌握在用户的手中了致谢特别的感谢总是给予BjarneStroustrup感谢他给予我们如此美妙的编程语言以及这些年他对我们的关心特别感谢C标准委员会成员的奉献和艰苦工作常常是自愿的以及他们对C所作的贡献下面这些人为本书稿的各个草稿提供了许多有益的建议PaulAbrahamsMichaelBallStephenEdwardsCayHorstmannBrianKernighanTomLyonsRobertMurrayEdScheibelRoyTurner和JonWada尤其要感谢MichaelBall的建议和鼓励特别感谢ClovisTondo和BruceLeung为本书所作的深刻评论Stan想把特别的感谢给予ShyhChyuanHuang和JinkoGotoh感谢他们对Firebird给与的帮助和支持当然还有JonWada和JoséeJosée要感谢GabbySilbermanKarenBennet以及IBM高级研究中心theCenterforAdvancedStudies的其他小组成员感谢他们为写作这本书所提供的支持最大的感谢要给予Stan感谢他带着她经历了这项伟大的冒险活动最后我们两个都要感谢编辑们的辛苦工作以及巨大的耐心DebbieLafferty他从一开始就为本书操劳MikeHendrickson以及JohnFullerBigPurple公司在排版上做了精彩的工作节的插图是ElenaDriskill做的非常感谢Elena使我们能够再版它第二版的致谢这本书是无数看不见的手在帮助作者的结果最由衷地感谢BarbaraMoo她的鼓励建议以及对原手稿无数遍地仔细阅读已经无法评价特别感谢BjarneStroustrup持续不断的帮助和鼓励以及他给予我们如此美妙的编程语言还有StephenDewhurst他在我第一次学习C时给了许多支持以及NancyWilkinson另一位cfront编写者和GummiBears的提供者DagBrückMartinCarrollWilliamHopkinsBrianKernighanAndrewKoenigAlexisLayton以及BarbaraMoo提供了特别详细和敏锐的建议他们的评论大大完善了这本书AndyBailyPhilBrownJamesCoplienElizabethFlanaganDavidJordanDonKretschCraigRubinJonathanShopiroJudyWardNancyWilkinson以及ClayWilson检查了书稿的各种草稿提出了许多有益的建议DavidProsser澄清了ANSIC的许多问题JerrySchwarz他实现了iostream包提供了附录A所依据的原始文档在第三版中变成了第章非常感谢他对附录的细致检查感谢版本开发小组的其他成员LauraEavesGeorgeLogothetisJudyWard和NancyWilkinson以下的人对AddisonWesley的手稿作了评论JamesAdcockStevenBellovinJonForrestIX译序MauriceHerlihyNormanKerthDarrellLongVictorMilenkovic以及JustinSmith以下的人指出了第一版的各种印刷错误DavidBeckedorffDagBruckJohnEldridgeJimHumelsineDaveJordanAmiKleinmanAndrewKoenigTimO'KonskiClovisTondo和SteveVinoski我非常感谢BrianKernighan和AndrewKoenig提供了大量可用的排版工具参考文献BOOCHBooch,Grady,ObjectOrientedAnalysisandDesign,BenjaminCummings,RedwoodCity,CA()ISBNOGAMMAGamma,Erich,RichardHelm,RalphJohnson,andJohnVlissides,DesignPatterns,AddisonWesleyLongman,Inc,Reading,MA()ISBNGHEZZIGhezzi,Carlo,andMehdiJazayeri,ProgrammingLanguageConcepts,rdEdition,JohnWileyandSons,NewYork,NY()ISBNHARBISONSamuelPHarbisonandGuyLSteele,Jr,C:AReferenceManual,rdEdition,PrenticeHall,EnglewoodCliffs,NJ(l)ISBNISOCDraftProposedInternationalStandardforInformationSystemsProgrammingLanguageCFinalDraft(FDIS)KERNIGHANKernighan,BrianW,andDennisMRitchie,TheCProgrammingLanguage,PrenticeHall,EnglewoodCliffs,NJ()ISBNKOENIGKoenig,Andrew,andBarbaraMoo,RuminationsonC,AddisonWesleyLongman,Inc,Reading,MA()lSBNlLIPPMANLippman,Stanley,CPrimer,ndEdition,AddisonWesleyLongman,Inc,Reading,MA()ISBNLIPPMANaLippman,Stanley,InsidetheCObjectModel,AddisonWesleyLongman,Inc,Reading,MA()ISBNLIPPMANbLippman,Stanley,Editor,CGems,aSIGSBooksimprint,CambridgeUniversityPress,Cambridge,England()ISBNMEYERSMeyers,Scott,EffectiveC,ndEdition,AddisonWesleyLongman,Inc,Reading,MA()ISBNMEYERSMeyers,Scott,MoreEffectiveC,AddisonWesleyLongman,Inc,Reading,MA()ISBNXMURRAYMurray,RobertB,CStrategiesandTactics,AddisonWesleyLongman,Inc,Reading,MA()ISBNlMUSSERJMusser,DavidR,andAtulSaini,STLTutorialandReferenceGuide,AddisonWesleyLongman,Inc,Reading,MA()ISBNl第一篇C概述我们编写的程序由两个主要方面组成算法的集合就是将指令组织成程序来解决某个特定的问题数据的集合算法在这些数据上操作以提供问题的解决方案纵观短暂的计算机发展史这两个主要方面算法和数据一直保持不变发展演化的是它们之间的关系就是所谓的程序设计方法programmingparadigm在过程化程序设计方法proceduralprogramming中一个问题可直接由一组算法来建立模型例如公共图书馆的资料借阅登记checkoutcheckin系统是由一系列过程表现出来的其中两个主要的过程是资料的借阅和登记这些数据被独立存储起来我们既可以在某个全局位置上访问这些数据或者把数据传递给过程以便它能够访问这些数据FortranC和Pascal是三种著名的过程语言C也支持过程化程序设计单独的过程如checkin()checkout()overdue()fine()等等都被称为函数第三篇将集中讨论C对过程化程序设计方法的支持尤其将重点讨论函数函数模板和通用算法在世纪年代程序设计的焦点从过程化程序设计方法转移到了抽象数据类型abstractdatatype简写为ADT的程序设计上现在通常称之为基于对象(objectbased的程序设计在基于对象的程序设计方法中我们通过一组数据抽象来建立问题的模型在C中我们把这些抽象称为类class例如在这种方法下图书馆资料借阅登记系统就由类的对象实例比如书借阅者还书时间罚款等之间的相互作用表现出来以此表示出图书馆的抽象概念与每个类相关的算法被称为该类的公有接口publicinterface数据以私有形式被存储在每个对象中对数据的访问应与一般的程序代码隔离开来CLUAda和Modula是三种支持抽象数据类型的程序设计语言第四篇将说明和讨论C对抽象数据类型程序设计方法的支持面向对象的程序设计方法通过继承inheritance机制和动态绑定dynamicbinding机制扩展了抽象数据类型继承机制是对现有实现代码的重用动态绑定是指对现有的公有接口的重用以前独立的类型现在有了类型子类型的特定关系一本书一盒录像带一段录音甚至孩子的宠物尽管它们有各自的借阅登记方式但都可以成为图书馆的收藏资料共享的公有接口和私有的数据都放在一个抽象类图书馆资料LibraryMaterial中每个特殊的图书馆资料类都从LibraryMaterial抽象类继承共享的行为它们只需要提供与自身行为相关的算法和数据SimulaSmalltalk和Java是三种支持面向对象程序设计方法的著名语言第五篇将集中讨论C对面向对象程序设计方法的支持C是一种支持多种程序设计方法的语言虽然我们主要把它当作面向对象的语言但实际上它也提供对过程化的和基于对象的程序设计方法的支持这样做的好处是对每个问题都能够提供最合适的解决方案事实上没有一种程序设计方法能够对所有的问题都提供最好的解决方案这样做带来的缺点是使得语言过于庞大复杂第一篇C概述第一篇将对整个C进行快速浏览这样做的一个原因是它可以提供对语言特性的介绍以便我们在完全面对这些特性之前可以自由地引用语言的各个部分例如直到第章我们才会详细介绍类但如果到那时候才提起类那么在此之前我们将不得不使用很多非典型的不恰当的程序例子提供快速浏览的第二个原因是从美学的角度出发除非首先让你领略到贝多芬交响曲的美丽与博大否则无关联的升半音降半音八度音符和弦等一定会让你厌烦但是只有掌握了这些细节才有可能创作音乐程序设计也一样精通C程序设计的基础是首先要穿过操作符优先级或标准算术转换规则的迷宫这样做既是必要的也是非常枯燥的第章将首先介绍C语言的基本元素包括内置数据类型变量表达式语句函数它将通过一个最小的并且是合法的C程序来讨论程序的编译过程预处理以及C对输入输出的支持这一章将给出多个简单但完整的C程序鼓励读者亲自编译并执行这些程序第章我们将浏览一个过程化程序一个基于对象的程序和一个面向对象的程序它们都实现了一个数组一个由相同类型的元素组成的有限元素的集合然后我们将这些程序中的数组抽象与C标准库中的向量vector类进行比较同时也将首次介绍标准库中的通用算法沿着这条路线我们还将介绍C对异常处理模板名字空间的支持实际上这一章对整个C语言作了大致的介绍细节部分将在以后各章节中详细介绍部分读者可能会感觉第章很难理解给出的许多资料没有初学者所期望的完整说明这些细节在以后的章节中讨论如果你对某些细节部分感到吃力或失去耐心建议略读或跳过它们等到熟悉这些资料以后再回头重读这些内容第章将以传统的叙述方式进行建议对第章不够适应的读者从第章开始开始本章介绍C语言的基本元素包括内置数据类型对象的定义表达式语句函数的定义和使用本章将给出一个最小的合法C程序主要用它来讨论程序的编译过程预处理并将首次介绍C对输入输出的支持我们还将给出一些简单但完整的C程序问题的解决程序常常是针对某些要解决的问题和任务而编写的我们来看一个例子某个书店将每本售出图书的书名和出版社输入到一个文件中这些信息以书售出的时间顺序输入每两周店主将手工计算每本书的销售量以及每个出版社的销售量报表以出版社名称的字母顺序排列以使下订单现在我们希望写一个程序来完成这项工作解决大问题的一种方法是把它分解成许多小问题理想情况下这些小问题可以很容易地被解决然后再把它们合在一起就可以解决大问题了如果新分割的小问题解决起来还是太大就把它分割得再小一些重复整个过程直到能够解决每个小问题这个策略就是分而治之divideandconquer和逐步求精stepwiserefinement书店问题可以分解成四个子问题或任务读销售文件根据书名和出版社计算销售量以出版社名称对书名进行排序输出结果我们知道怎样解决第和个子问题因此它们不需要进一步分解但是第个子问题解决起来还是有些大所以对这个子问题重复我们的做法继续分解a按出版社排序b对每个出版社的书按书名排序c在每个出版社的组中比较相邻的书名如果两者匹配增加第一个的数量删除第二个ab和c所代表的问题现在都已经能够解决了由于我们能够解决这些子问题第一章开始因此也就能够有效地解决原始的大问题了而且我们也知道任务的原始顺序是不正确的正确的动作序列应该是l读销售文件对文件排序先按出版社然后在出版社内部按书名排序压缩重复的书名将结果写入文件这个动作序列就是算法algorithm下一步我们把算法转换成一种特定的程序设计语言在这里是C语言C程序在C中动作被称为表达式expression以分号结尾的表达式被称作语句statementC中最小的程序单元是语句在自然语言中与此类似的结构就是句子例如下面是一组C语句intbookcount=bookcount=booksonshelfbooksonordercout<<"Thevalueofbookcount:"<<bookcount第一条语句是一个声明declaration语句bookcount被称为标识符identifier或符号变量symbolicvariable简称变量或者对象object它定义了计算机内存的一块区域并且与名字bookcount相关联被用来存储整数值是一个文字常量literalconstantbookcount被初始化为第二条语句是一个赋值assignment语句它把booksonshelf和booksonorder的值相加并把结果放入与bookcount相关联的计算机内存区域中这里假定booksonshelf和booksonorder已经在前面的代码中被声明为整型并赋了初值第三条是输出output语句cout是与用户终端相关联的输出目标<<是输出操作符该语句向cout即用户终端先输出用引号括起来的字符串文字然后输出存储在与名字bookscount相关联的内存区域中的值假设此时bookscount中的值为那么输出结果为thevalueofbookcount:把语句按逻辑语义分组就形成了一些有名字的单元这些单元被称为函数function例如把所有需要读取销售文件的语句组织到一个被称为readln()的函数中类似地我们可以构成sort()compact()和print()函数在C中每个程序必须包含一个被称作main()的函数它是由程序员提供的并且只有这样的程序才能运行下面是按前述算法定义的一种main()函数intmain(){readIn()sort()compact()第一章开始print()return}C程序从main()函数的第一条语句开始执行在本例中程序从函数readln()开始并且程序按顺序执行main()函数中的语句在执行完main()函数的最后一条语句之后程序正常结束函数由四部分组成返回类型函数名参数表以及函数体前三部分合起来称为函数原型functionprototype参数表由小括号括起来包含一个或多个由逗号分开的参数函数体由一对花括号括起来由程序语句序列构成在本例中main()函数的函数体调用invoke函数readIn()sort()compact()和print()当这些函数调用都完成时下面的语句return

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/49

C++书籍

仅供在线阅读

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利