标准C++程序设计(牛连强)

所需积分/C币:9 2016-01-12 17:16:55 27.7MB PDF
0
收藏 收藏
举报

标准C++程序设计(牛连强) 覆盖了C++中核心内容,写的比较精炼,可以快速学习,适合复习,工作参考。 有一本纸质书看完了,电子版找了很久,终于找到。
本资源由www.uubooks,cn整理分享,更多更全电子书,随书光盘,视频教程资源尽在www.uubookscn C+语言的实用性及魅力是毋庸置疑的。时至今日,介绍C+编程的图书可谓 数量众多,包括国内外学者撰写的各种设计类、教材类书籍,其中不乏学习和研究 C+语言程序设计的经典,如《C++ Primer中文版》、《C++语言程序设计(特别版)》 等。不过,因为C+语言本身的内容很多,所涉及的部分概念也较为复杂,致使图 书的篇幅激增。各种教材动辄四五百页,令人望而生畏。事实上,各类学校开设 C+课程的时间、先期的课程安排、教学大纲的要求等都不尽相同,而多数学习者 也不是以成为C+语言的专家为目标,注重的是掌握必备的知识,能更好地应用其 从事软件开发工作。此外,C++在较长时间的改进中,形成了不同的版本,教学中 也需要适时将新标准介绍给读者。 基于上述原因,我们重新组织编写了这本《标准C++程序设计》,力图以有限 的篇幅透彻讲解标准C++语言的核心内容。 本书可作为第二门程序设计课程的教材,考虑到很多学校在开设C++课程之前 已经先学习了C语言课程,因此,本书对C++中继承自C语言的过程化程序设计部 分(包括流程控制)没有作过多讲解。 本书内容仍以过程化和面向对象两大部分构成。第1章介绍C++语言的预备知 识,并用简单示例比较了过程化程序设计与面向对象程序设计在思维上的差异。第 2~5章介绍C艹语言的过程化语法,并对C++语言中的基本对象作了渗透。第6 12章介绍C艹语言的面向对象特征,第13章简要说明了建立在类模板基础上的泛 型编程技术。第14章介绍了C艹的异常处理机制。标注*号的章节,授课教师可根 据实际教学情况选讲。 每章开始以精炼的语言扼要说明本章的内容,难点被适当地分解在各章里。每 章最后安排了若干条提示和思考题。这些提示可视为注意事项,对程序设计者积累 经验、养成良好习惯具有很好的警示作用。思考题有助于理解语言的语法现象,值 得认真对照教材去分析,乃至构造适当的例子去实验。每章结束部分配备了相当数 量的习题。 书中所有的完整程序代码都由作者在C+ Builder6.0环境下调试通过。之所 以选择C++ Builder6.0而不是 Microsoft visual c++,是因为后者含有较多非标 准性的成分,对标准C++和标准类编程的支持都不理想,甚至在一些局部问题(如 函数中产生的临时对象等)上采用的处理方法明显地缺乏合理性。不过,对于利用 控制台程序进行语法学习的读者来说,使用哪一种环境差别并不大,本书对一些 visual c+6.0明显不支持的场合作了简要说明,而书后对这两种环境的使用方 法都给出了介绍。 对于学习者,掌握程序设计技术最好的途径就是上机实验。为此,每章末都包 含了大量的实践性题目,它们都有不同程度的应用背景,而不是没有实际应用价值 的“益智问题”。 本资源由www.uubooks,cn整理分享,更多更全电子书,随书光盘,视频教程资源尽在www.uubookscn 彐标准C艹程序设计 另外,本书注重程序设计的理念和实际编程技术,目标是努力提高学生的编程 能力,摆脱计算机专业毕业生不会编程的现象。 作为教师,学生提出的问题、自己的编程实践和对技术的思索、特色教学的需 求都是促使我们編写这本教材的源动力。参加本书编写工作的还有任义、冯海文、 傅博文、杜梅,在此还要感谢计算机科学与技术专业04级的同学,他们阅读了本 书的初稿,尤其是马玉飞同学,十分认真地指出了一些文字上的错误,包括部分修 改意见,我们十分感谢他的热情和劳动。 应该说明,这是一本可以用作48~64学时教学的教材,我们努力从程序员的 角度来介绍标准C++语言的基本技术和精华内容,但限于篇幅,有些内容无法详述 如需更深、更详细地研究时可参考前文提及的那些经典著作和参考文献中所列的书 日,研读这些著作会带给人更深邃的思想。 本书为授课教师提供电子课件等较为全面的学习辅助资源,有需要者请登录人 民邮电出版社(www.ptpress.com.cn)免费下载 本书是作者多年教学实践的产物,我们希望它能够引导读者步入C++的辉煌殿 堂,也特别希望读者能够不吝指出书中的缺点和错误,与我们交流,以便将其修改 得更完善。 作者的电子邮箱:niulg@sut.edu.cn。 作者 本资源由www.uubooks,cn整理分享,更多更全电子书,随书光盘,视频教程资源尽在www.uubookscn 第1章 C++语言基础 C++是从C语言基础发展起来的面向对象程序设计语言,但二者是相互独立的。本章简要说明 C+语言的发展,用示例演示C艹+的简单程序和一般结构,并对结构化程序设计与面向对象程序设 计的思想作了比较,以期使读者建立起面向对象程序设计的初步印象。最后,扼要介绍了高级语 言程序的处理过程。 1.1C++语言概述 C+是一种以C语言为基础开发的高级语言,一般认为C是C++的一个子集或基础语言,但二者又 是完全独立的。如果说C++擅长大型程序的开发与设计,C则适合于更底层的项目开发。由于C++基本 包含了C语言的所有主要特性,因此,了解C语言(或其他程序设计语言)对C艹的学习会有较大帮 助。反过来说,因为C艹放弃了C语言中的某些难于理解的部分,如格式复杂的输入输出函数等,使 其过程化的程序设计部分更容易掌握。不过,由C语言的传统的过程化程序设计方法过渡到新的面向 对象程序设计方法总需要付出相当多的努力,而且C艹+的内容也远比C语言更庞杂。 考虑到目前多数的读者都有学习C语言的经历,而且C++本身所包含的内容、技术较多,本 书的写作是以假设读者貝有一些C语言编程知识为前提的,同时也有选择地忽略或淡化了某些不 太常用或复杂的内容,以使其易于作为教材使用。 1.1.1标准C++ C++的发明者是A&T贝尔实验室的 Bjarne stroustrup博士,他给出了C+的第一个定义 首先,C+保留了C作为一个子集,使C+具有C语言的处理复杂的底层系统程序设计工作的能力。 其次,为了增加面向对象特性,C++从 Simula语言引入了类的概念,包括派生类和虚函数。此外, C+也借鉴了Agol语言的运算符重载等特性,形成了C++的早期版本,被称为“带类的C”。这期 间,C+-编译系统只是一个将¢+代码翻译成C代码的预編译系统。 随后,C艹的语法经过了若干次审査和修订,主要包括对重载的解析、连接以及存储管理,也 在多重继承、 static成员函数、 const.成员函数、 protected成员、模板、异常处理、运行时类 型识别和名字空间等方面进行了扩充,日的是使C++更容易编写和使用库。1988年诞生了第一个 真正的C+编译系统。对于容器和泛型算法的支持,最初是以标准模板库ST形式提供,目前也 已正式纳入C++标准。 随着C+应用的迅速增长,C++的标准化已不可避免。1989年,成立了旨在建立C++标准的ANSI 本资源由www.uubooks.cni整理分享,更多更全电子书,随书光盘,视频教程资源尽在www.uubooks.cn 彐标准C程序设计 委员会。到1991年,该委员会的C++标准化工作正式成为IS0的C+标准化工作的一部分。1998 年,ISO/ ANSI C++标准正式通过并发布 考虑到C+标准的建立过程和市场上语言版本的应用状况,C++标准不得不保留对C及老版本 C+的兼容,这在外观上造成了C++内容十分庞杂的感觉,也为使用不同时期的C和C++功能带来 了一些小的困扰,如头文件的处理等问题。本书将完全以ISO/ANSⅠ的标准C++为背景,但也会少 量涉及一些早期语言中的问题 总体上,C+是一种混合语言,或者说C+是一种集过程化设计、面向对象、基于对象和泛型 算法等多种技术于一体的编程语言。 计和设计技术的理解远比对细节的理解更重要,而这种理解的根本是时间和实践x 在学习C++语言时,最重要的是集中关注概念,不要迷失在语言的技术细节中。对 程序设 1.1.2C++语言的简单程序 这里给出了一个简单的C+程序示例,功能是计算两个整数的和并将结果输出到屏幕上 Hinc ludeiostream //头文件包含 小例程序11.epp using namespace std //名字空间声明 //以下是main函数定义 int ma in() /主函数定义 intx=10,y=20: //变量定义 int 2= xt //运算 cout <<sun is<< 2 << endl //输出 return o 程序运行时的输出结果为: sun 1.main函数与程序结构 C+程序是由函数组装而成的,一个完整的程序中必须且只能有一个名字为main的函数,称 作主函数,而这个面向过程的主函数来自于C,也成了C+是混合语言的象征。程序可以只由一个 main函数构成,也可以由多个函数组装而成,但执行时总是从main函数开始。标准C+要求main 函数的声明类型为int(而非C语言常见的void),只要在最末加上“ return0;”语句即可(也 可不加) C+程序的外观结构与C极其相似,包括以下内容 预处理指令部分 ●函数声明部分 类型定义部分 in函数定义 其他函数定义 就一个函数(如main函数)来说,定义函数是指说明函数的格式和要执行的代码。这些 代码放在一对花括号“{}”内,称为函数体。函数体一般包括变量定义、输入、运算和输出 等内容 2.头文件包含与名字空间 程序中的“# include< iostream>”是用于包含头文件的预处理指令,语句“ using namespace 本资源由www.uubooks,cn整理分享,更多更全电子书,随书光盘,视频教程资源尽在www.uubookscn 第1章C+语基础上三 std:”说明使用名字空间std。首先,包含 iostream文件是因为使用了cout对象的原故,即cout 定义于 iostream,没有头文件包含时,编译器不能识别cout的含义。其次,为了区别标准C+-、 C及老版本的C艹+,也为了减少程序中不同区域定义的名字之间的沖突,C++引入了名字空间的概 念。目前可以将一个名字空间理解成包含若干定义的一个区域的名字,而标准C+的所有定义都 属于名字空间std。因此,需要向鳊译器表明,以下程序中岀现的定义如果不是局部的,应在名 字空间std中查找。换句话说,只要使用C++标准库,就应该说明使用名字空间std。在很长一段 时间里,我们都使用这种固定的方法,即在程序开头加上如下代码,初学时不必深究其含义: #includeiostream> //头文件包含 using namespace std: //名字空间声明 当然,也可以不在程序的开始处说明使用名字空间std,而直接将std冠于一个名字之前,例 如: std cout < sun is<< 2<< std:aendl //输出 此时,編译器也会认为cout和endl是属于名字空间std中定义的名字。这种作法可能会使 人觉得麻烦。 3.注释 程序注释是对程序中的代码、变量等所作的说明,在程序编译时对注释不作任何处理。程序 中添加注释有助于提髙程序的可读性,是非常必要的部分。在一些特殊程序中,注释可达整个篇 幅的1/3以上。 C++中的注释分两种,包括来源于C的“/注释*/”(可称为注释对)形式和新的“/注释” 形式。前者是段落形式的注释,可以包含连续的任意多行,可以在任何允许插入空格的地方插入 后者是行式注释,即从“/”开始到本行结束的内容均为注释。 通常,可以这样对程序进行注释 (1)在程序头,添加有关程序名、功能、作者、目的、用途、修改史等的注释; (2)在函数前,添加有关函数的功能、参数、返回值和劑作用等的注释; (3)在变量定义后,说明变量的含义 (4)在函数体开头,解释算法思路; 5)在类定义前或类定义中添加注释,说明类和成员的功能。 限于篇幅,本书通常只在行末添加少量、必要的注释,这些注释以中文形式给岀,多用于解 释所在行代码的功能、含义和应注意的事项。 4.输入输出对象 程序中通常要从键盘接收用户的输入,并将运算结果输出到显示器上。与C语言的函数式输 入输出技术不同,C艹+借助标准库中定义的对象来实现,目前可以认为这些对象是一种能力很强的 变量。输入数据采用的对象是cin,语法形式示例如下 1nt x double y cin>>x》y //也可写成:cin>x;cin》y 上述语句可以将用户输入的数据保存到变量x和y中。 输出数据采用对象cout实现,语法形式示例如下 int x=10. cout(<"xis"<<x(’.’(’ 此语句连续输出4部分的值,结果是“xis10.”。示例程序11.cpp中输出语句末端的end1 本资源由www.uubooks,cn整理分享,更多更全电子书,随书光盘,视频教程资源尽在www.uubookscn 标准C++程序设计 与这里的‘\n’作用基本相同,用于将光标转移到下一行的开头。 5.编码习惯 C和C++的程序都以书写格式自由著称,这是指程序的书写几乎不受什么限制,程序员可以在 行上书写多个语句,也可以把一个语句写在多个行上。当然,这种灵活性可能使程序缺少一种 可以遵循的规范。应该说,尽量保持好的书写风格是必须养成的习惯。因此,初学者应该注意程 序的书写“格式”,如缩进格式和成对符号的对齐排列等。本书所提供的示例程序将尽量给读者提 供一种可借鉴的规范,偶尔(如习题中)可能将相近的代码写在同一行内,这纯粹是出于篇幅的 考虑。 1.2面向对象的程序设计思想 从¢向C+过渡的实质是由过程化程序设计思想向面向对象程序设计思想的转变。本节以一 个简单的程序来比较一下两种技术的差别,但这种比较仅是粗浅的、感官上的,读者并不需要完 全了解描述过程中所涉及的所有技术细节。 2.1过程化的程序设计 用计算机解决问题时总要设计程序,即以某种语言为工具编写控制计算机执行的动作序列 每个动作代表了一定的操作。随着人们看待问题和解决问题的思想观点的变化,程序设计方法也 出现了很大差别。当然,程序设计方法的变革是以简化编程和提高软件生产率为目的,而不是以 牺牲程序的正确性和效率为代价的。 由于編程问题起源于最初的科学计算,因此,长期以来,程序组织都是围绕算法的切分而 展开的。面对一个问题,设计者首先要“建立需求分析和系统规格说明”,即“建立一系列规则, 根据它判断任务什么时候完成,以及客户怎样才能满意”。随后,工作的重心就转移到如何把一 个很大的项目分割成适当的小块,再由这些小块组织起来完成整个项目的工作,而程序员的职 责就是考虑如何更好更快地实现这些小块。这样的处理方式被认为是基于过程的。在过程化程 序设计中,数据和算法是问题的中心,程序设计的中心工作是研究数据的描述、存储和数据间 的关系,以及作用在数据结构上的算法,这些算法通过一个一个的过程来体现,如图1-1所示。 因此,N. Wirth认为,算法+数据结构=程序。 tah Enl En2 fn3 gim In2 gml m之 图1-1由函数组成的程序 过程化的问题处理思路形成了一套有效的程序设计方法,称为结构化方法,它体现在以下三 个方面。 4 本资源由www.uubooks,cn整理分享,更多更全电子书,随书光盘,视频教程资源尽在www.uubookscn 三第1章C+语营基础三 (1)程序设计采用自顶向下、逐步细分的方法展开。 2)模块化。这是指程序中的过程体和组成部分应以模块表示,模块还可以称为过程、子程 序或函数,C和C艹中统称为函数。每个模块应具有较高的独立性,即强内聚性和弱外联性。这里 的内聚性是指模块内部功能的单一性,而外联性是指同其他模块的联系。这样做的目的是使对 个模块的修改不致于对其他模块造成太大的影响。 3)使用三种基本控制结构。这是指描述任何实体的操作序列只需要“顺序、选择、循环” 这三种基本流程控制结构。从整体上看,模块中的指令(语句)总是由上到下按顺序逐个执行的, 但局部可能有选择或重复(循环)。这三种结构的共同特点是每种结构只有一个入口和一个出口, 从而使得程序更容易理解和维护,如图1-2所示。 成立 不成立 B B 成立 不成立 顺序 选择 循环 图1-2三种基本结构 这里考虑一个五子棋游戏的过程化程序设计示例。采用过程化方法可以将整个问题按处理过 程分解如下(括号中为函数需要处理的数据) 开始函数( 绘制画面函数(棋局数据) 走棋函数(哪种棋子) 判断输函数(棋局数据) 输出结果函数(棋局数据) 结束函数(。 完整程序可以按下述流程实现: int main() /初始化工作,如假定黑棋先走等 开始函数0 绘制画面函数(初始棋局); 重复下述步骤 1走棋函数(黑子); 如果(判断输赢(棋局)=已定出输赢)停止重复: 走棋函数(白子) 绘制画面函数(棋局) 如果〔判断输赢(棋局)==已定出输赢)停止重复: 输出结果数(棋局) 结束函数0 由于过程化设计中的数据与过程是相互独立的,一个过程完全可以作用到并不相关的数据上, 也不能保证对数据操作的合理性,数据对于算法(操作)完全是被动的。由于函数过程表示一种 5 本資源由wwwuubookscr鏊理分享,更多更全电子书,随书光盘,视频教程资源尽在www.uubookscn 标准C++程序设计 操作,数据是操作对象,因此,这种操作是一种“谓语十宾语”结构。 1.2.2面向对象的程序设计 面向对象设计方法将客观世界看成是由对象组成的。对象是一种实体,具有自己的属性和行 为。一个程序也由对象及其相互间的协作来实现。 例如,对于五子棋游戏,完成一次比赛应由两个选手、一个裁判和一个组织者组成。选手只 负責走棋,裁判负责判定输赢和确定比赛是否结朿,组织者提供场所和设施。这里的每个人是 个对象,对象之间通过消息实现协作。不同对象应具有不同的行为,例如: 选手:走棋(); 裁判:确定比赛开始O);判断输嬴();确定比赛结束(); 组织者:绘制画面;输出结果( 这样的程序可以按下述结构实现: int main( 定义对象,包括黑棋选手,白棋选手,裁判,组织者 //初始化工作 截判.确定比赛开始(); 组织者.绘制画面O); 重复下述步骤 黑棋选手走棋0; 如果(裁判判断输蠃()=已定出输贏)停止重复; 白棋选手.走棋0; 组织者绘制画面0 如果(裁判.判断输蠃()=已定出输赢)停止重复」 组织者.输出结果(); 裁判确定比赛结束() 其中,棋手对象负责走棋,并告知组织者对象有关棋子布局的变化,组织者对象接收到这些 信息后负责在屏幕上面显示这种变化,同时利用裁判对象来对棋局进行判定。 限于篇幅,上述例子还不能全面解释面向对象程序设计的所有特性,但可以明显地看出,面向 对象是以功能而不是步骤来划分问题的,这种方式与人的思维方式吻合。不同对象各司其职,对象 自身行为实现方式的改变不会影响到其他对象,对象间通过互通消息实现合作,如图1-3所示 对象A1 对象C1 接口 对象A2 对象B1 对象C2 对象B2 对象C3 图1-3面向对象运行模式 从实现上看,对象的每次操作都是在该对象接收到一定消息后的自主行为(用“对象.函数名” 形式表示),具有“主语+谓语”的形式。 在采用面向对象技术解决问题时,首先要考虑的问题是整个项目的求解是由哪些对象组成的, 再分析对象应具有什么样的行为,随后考虑对象之间应怎样协作。 6

...展开详情
试读 127P 标准C++程序设计(牛连强)
立即下载 低至0.43元/次 身份认证VIP会员低至7折
抢沙发
一个资源只可评论一次,评论内容不能少于5个字
上传资源赚积分or赚钱
    最新推荐
    标准C++程序设计(牛连强) 9积分/C币 立即下载
    1/127
    标准C++程序设计(牛连强)第1页
    标准C++程序设计(牛连强)第2页
    标准C++程序设计(牛连强)第3页
    标准C++程序设计(牛连强)第4页
    标准C++程序设计(牛连强)第5页
    标准C++程序设计(牛连强)第6页
    标准C++程序设计(牛连强)第7页
    标准C++程序设计(牛连强)第8页
    标准C++程序设计(牛连强)第9页
    标准C++程序设计(牛连强)第10页
    标准C++程序设计(牛连强)第11页
    标准C++程序设计(牛连强)第12页
    标准C++程序设计(牛连强)第13页
    标准C++程序设计(牛连强)第14页
    标准C++程序设计(牛连强)第15页
    标准C++程序设计(牛连强)第16页
    标准C++程序设计(牛连强)第17页
    标准C++程序设计(牛连强)第18页
    标准C++程序设计(牛连强)第19页
    标准C++程序设计(牛连强)第20页

    试读结束, 可继续阅读

    9积分/C币 立即下载 >