C + 程序设计教程 C++程序设计系列教材 钱能主编 华大学出版柱》 nmp/www Iup tinghua. Gau,Er
前言 C++是一门高效实用的程序设计语言,它既可进行过程化程序设计也可进行面向对 象程序设计。C++语言强调对高级抽象的支持。C++实现了类的封装数据隐藏、继承及 多态使得其代码容易维护及高度可重用。随着c++渐渐成为ANS标准这种新的面向对 象程序设计语言迅速成为了程序员最广泛使用的工具。几乎在所有计算机研究和应用领 域,都能看到C++的影子。 C++从C进化而来,是C语言的超集。C+在程序结构的本质上与C是一致的都是 用函数驱动机制实现。学过C语言再来看C艹,就会感到C++更简单和容易理解。我们 说过程化程序设计与面向对象程序设计之间并无水火不容的矛盾面向对象程序设计是过 程化程序设计的自然升华。 本书对于学过或没有学过C语言的读者都是适用的。如果学过 ANSI C,则可以跳过第 部分的程序设计基础直接阅读第二部分。在学习第二部分时,遇到某些概念不清之处 可以根据章节目录查阅第一部分的有关内容。本书配备有《C++实验指导书》和《C++习题 解答》,这对自学者尤为方便。 本书适合做大学计算机专业和非计算机专业的程序设计基础课程教材。通过本书可达 到以下三个培养目标 1.程序设计人门,领略什么是面向对象程序设计; 2.掌握程序设计方法,领会面向对象程序设计; 3.把握C++程序设计的灵魂,掌握面向对象程序设计的方法。 纵观当前,C+的发展领导了程序设计语言的潮流,大有取代其他程序语言之趋势。 在教学上,它以其面向对象的特征和严密的类型系统而正在悄无声息地取代 PASCAL;在科 学计算功能上,它比 Fortran更为可靠和方便;在系统软件的研究开发上,它又是上选的语 种;在小规模控制应用上,C++的效率比之C毫不逊色;在大规模应用软件开发上,以 Windows环境为代表的C+类库以及组件(组合类库)在迅速发展,它的触角触及各个领域。 C+编译器以 Borland C+和vilC+为典型,其版本在激烈的竞争中快速更新。 那些老版本,如 Micosoft C和 Tabor c已经很少为人所用。即使学习C语言的人们目前也多 在C++的编译环境中上机操作与调试。计算机等级考试的程序设计要求也在补充和更新。 这就是C++不久即将取代C的无可抗拒的趋势与事实。C++作为程序设计基础教学也将 以强有力的态势迅速取代C语言 C+程序的集成开发器如 Borland c++和vilC++(2.0以下版),作为软件开发工 具,已经不再时髦。 Borland C++将不再有新版本,Band公司的C++ Builder将取代现在的 Borland c++,就像当初 Borland c++取代 Tubor C一样。软件开发进入了可视化程序开发环 境的时代。 方面是陈旧的软件开发工具在淘汰另一方面是新的软件开发工具在崛起。作者竭力 推崇新的软件开发工具BC++ Builder4.0和 Visual C++6.0,因为它们不但是优秀的可视化
开发工具,而且由于它们是基于C++的,可以充分发挥C++语言强大灵活的特点,用面向 对象程序设计方法去阅读、理解、思考和分析、设计以及编程。 学好C++,很容易触类旁通其他软件,如基于Java语言的Visual J++和J++builder,而 且像ActiveX SDK和DirectX SDK等都是C++形式的。C++架起了通向强大、易用、真正的 软件开发应用的桥梁。计算机发展到今天,培养一个具有相当的应用软件开发能力的人才, 已经不需要很长的周期了。这给我们每个人都带来了最好的机遇和最大的挑战。我们的战 略是,大学一年级,学习C++课程,大学二年级,在适当的指导下就可学习如C++Builder和 Visual C++这些快速应用程序开发工具了。这意味着计算机专业的学生,大学二年级,就可 以冲向计算机应用的前沿,以此与计算机其他课程的学习相辅相成。非计算机专业的学生, 同样也可以在应用开发的实践中找到自己的位置。 学程序设计,不仅要在运用程序设计的思想上获得一个大的突破,也应在运用程序设计 的开发工具上,走向真正的实用。这才是真正的理论联系实际,而且是事半功倍的学习方 法。 本书分为两大部分。第一部分,第1章至第10章,是基础部分,主要介绍C++程序设 计语言,程序结构和过程化基础。第二部分,第11章至第21章,是面向对象程序设计部分, 它建立在C++程序设计基础之上,讲述了面向对象程序设计的方法。 本书内容特点 1.强化重要概念 函数:函数是理解C/C++语言的重要基础。在书中作了较多的描述。 程序结构:程序结构的理解与实践是从++语言的学习跨向实际应用的关键。作者在 这方面也注人了较多的笔墨。 指针:指针是理解各种++语言现象的关键,透过指针能够更好地理解语言的表达和 程序的工作。这本书对指针重点展开介绍。 链表:链表是数据结构的基础,也是软件设计的重要技术。作者强调链表实现技术,是 想从根本上让读者领会程序设计的技术性和艺术性。 引用:引用是C++特有的,C++面向对象的程序能够被人阅读理解,引用起了很大的 作用。本书专辟一章讲述。 类:类是面向对象程序设计的首要概念。书中从第1章起,不停地描述类类型机制和 面向对象程序设计的各项内容。 继承与虚函数:继承与虚函数是++实现类的多态性的机制。它因而也是面向对象程 序设计的关键之一。理解继承与虚函数能使读者从整体上把握面向对象程序设计的方法, 从而走向真正的实用。 2.舍弃次要内容 联合与位域:本书只介绍结构而不介绍联合和位域,是考虑到这些内容相对整个程序设 计的功能来说已经退化。 ·Ⅱ·
多级指针:书中只介绍多级指针的概念(多维数组也如此),而不具体展开。 考虑到篇幅不讲成员指针:在《C++习题解答》中,有对成员指针的介绍作为本书的补 3.不求面面俱到,但求通俗易懂 本书不是语法参考书,是自成体系的C+教科书。它的目的是让读者通过自学或在老 师讲授下,能够运用C++语言的基本要素,进行基本的结构化程序设计和面向对象的程序 设计。因此全书紧紧围绕着如何进行程序设计而展开。前半部分,讲述C++程序设计基 础,在此基础之上,后半部分,介绍面向对象程序设计的具体方法 4.以C作为背景 本书讲述的内容以 ANSI C+为标准。书中出现的C内容是C++的参照。如关于C 库函数prln和 scant,出现在与C+流作比较的场合库函数mc和fee出现在与C++的 new和 delete作比较的场合。另外,还有C中的结构与C++中的结构之差异,C中的函数名 与C++中的函数名之差异等。 考虑到准备参加C语言等级考试的读者,我们在书中对C的数学和字符串操作库函数 作了适当的介绍。 本书编排特点 每章首均引出本章将要讲述的内容和学习要求。 ·在每章结束时,都做了小结给出本章内容的概括性描述指出本章在全书中的重要 程度,并且指导学生进一步学习有关内容。 每章末安排的习题都是操作性习题,能通过上机加以验证。 书中遇有在理解上特别重要的内容用黑体标记。 与本书章节内容紧密联系的一些概念和说明用→引导,另起编段 本书的各章与《C++实验指导书》中的实验内容相配合,相辅相成。 ·本书的各章与《C++习题解答》中的各章一一对应。教程中没有写进去的内容有些 在习题解答中得到了补充。教程中的习题有些在习题解答中有类似的题解。 本书强调程序的可读性。使用统一的程序设计风格,并希望读者自始至终地模仿。 ·本书强调程序的可移植性。不以某个C++编译器为标准,而以最新的 ANSI C++标 准为编书标准。程序中的编译错误,一般用 Borland c++(简称BC)中的出错信息给 出。有些BC中的警告在 Visual c++(简称vC)中是编译错误或反之,则同时也给出 vC的出错信息。 本书中包含了大量的程序例子,并附有运行结果。凡在程序开头带有程序名编号 的,都是完整的程序,它们经过了上机调试,可以直接在计算机上编译运行。运行结 果中,如果是手工键人的字符,则用下划线表示 本书中所有编号的程序,读者可到 Intemet网清华大学出版社站点fp://hp, tsing edu. cn上查找
本书第2,3,4,5章由董灵平老师写稿第6,9,10章由张敏霞老师写稿,其余由钱能老 师编写,最后由钱能老师统稿。 有几十年教学经验的彭铭南老师,以其浑厚的数学功底,广博的计算机知识,始终给予 作者以深切的关心和培养,书中也不时地表述着他的观点和看法。 衷心感谢C++教学研究组的胡同森老师无偿提供给作者珍贵的C++讲稿,该讲稿使 作者获得了许多写作的动力和创作的灵感。胡老师还给该书内容提出了许多宝贵的建议 宋亮和胡坚是作者的两位忠实的学生,他们阅读了全书,从写书风格、可理解性、详略程 度等方面都提了许多非常宝贵的意见,这些建议大多数被作者采纳 许多同事对编著此书的关心给了作者巨大的动力 大量的学生频繁地问的各种各样的问题给了作者以最大的帮助和启示,在这里深表谢 意 大学C++程序设计基础教学尚在起步,教学方法,手段和形式还在摸索中。本教材编 写中难免有不足之处我们诚恳期待读者的批评指正和建议以供再版时参考使本书日臻 完善。 作者的电子邮件地址是: qianneng@mailhz.zj.cn 通信地址是 杭州市德胜新村12幢1单元101室钱能收(郎编310014) Ⅳ
目录 第一部分C++过程化语言基础 第1章C+入门…… 1.1从C到C 1.2程序与语言… 1.3结构化程序设计… 14面向对象程序设计 15程序开发过程… 11245678 16最简单的程序……… 小结…………………………………1l 第2章甚本数据类型与输入翰出… 2.1字符集与保留字 12 2.2基本数据类型 23变量定义…………………… 24常量………………………………… …………………17 25常量定义 2.6/O流控制………… 2.7prin与 scanf 28 小结 练习 ………32 第3章表达式和语句 31表达式…………………………34 3.2算术运算和赋值…………………………………36 33算术类型转换 38 34增量和减量 3.5关系与逻辑运算… 3.6i语句… 3.7条件运算符………………………………… 38逗号表达式 48 39求值次序与副作用…………………………
小结 练习…… 第4章过程化语句… 4. 1 while语句… 4.2d.. while语句 4.3for语句… 4.4 switch语句 4.5转向语句……………………… 4.6过程应用:求π… 4.7过程应用:判明素数… 68 4.8过程应用:求积分…………………………………… 小结 练习 第5章函数 5.1函数概述 52函数原型……… 53全局变量与局部变量… 54函数调用机制 55静态局部变量 56递归函数…… 5.7内联函数…………… 58重载函数…………… 59默认参数的函数 小结 练习 第6章程序结构… 100 6.1外部存储类型… 62静态存储类型 102 6.3作用域…… 击 64可见性 110 65生命期 66头文件 l13 67多文件结构… 115 68编译预处理 116 小结… 117 练习
第7章数组 71数组定义 72访问数组元素… 73初始化数组… 74向函数传递数组… 75二维数组…… 7.6数组应用:排序 77数组应用: Josephus问题 78数组应用:矩阵乘法 小结 练习… 第8章指针 8.1指针概念…………… 82指针运算 83指针与数组 84堆内存分配… 8.5onst指针 8.6指针与函数 3596g 87字符指针 88指针数组… 89命令行参数……… …174 8.10函数指针 练习 第9章引用………………… 91引用的概念 92引用的操作 93什么能被引用 94用引用传递函数参数 189 95返回多个值……… 96用引用返回值 97函数调用作为左值 98用 const限定引用……………………… 99返回堆中变量的引用 200 小结…………… 练习 PdfcreatedwithFinePrintpdffactoryProtrialversionhttp://www.fineprint.com
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com
第10章结构 10.1结构 102结构与指针 103结构与数组 10.4传递结构参数 212 105返回结构 214 106链表结构… 217 10.7创建与遍历链表 219 108删除链表结点… 109插入链表结点 10.10结构应用: Joseph问題… 小结 练习 第二部分面向对象程序设计 第1章类 11.1从结构到类………… 232 11.2软件方法的发展必然 113定义成员函数 I1.4调用成员函数 ……240 11.5保护成员 ………244 116屏蔽类的内部实现 247 11.7再论程序结构… 252 小结… 练习 第1章构造函数 12.1类与对象 260 122构造函数的需要性 12.3构造函数的使用……… 263 12.4析构函数 125带参数的构造函数… …271 126重载构造函数 127默认构造函数 276 128类成员初始化的困惑… 78 129构造类成员… 12.10构造对象的顺序………… 285 小结
练习 第13章面向对象程序设计 13.1抽象… 13.2分类……………… 133设计和效率 292 134讨论 Joseph问题 13.5结构化方法 …294 136结构化方法的实现…………… 13.7面向对象方法 298 138面向对象方法的实现………………………………………301 139程序维护………… 小结 310 练习………… 311 第14章堆与拷贝构造函数 312 4.1关于堆 312 14.2需要new和 delete的原因…………… 312 143分配堆对象 3l4 144拷贝构造函数…………… 315 14.5默认拷贝构造函数… 318 14.6浅拷贝与深拷贝… 319 14.7临时对象 148无名对象 14.9构造函数用于类型转换 小结 练习 第15章静态成员与友元 330 15.1静态成员的需要性… 330 15.2静态成员的使用………… 153静态数据成员 335 154静态成员函数… 338 155需要友元的原因……………… 15.6友元的使用 小结 ·、,甲,。。 练习…