第16章继承 16.1继承的概念… 162继承的工作方式 16.3派生类的构造… 16.4继承与组合………… 165多态性… 16.6多态的思考方式 16.7多态性如何工作… 168不恰当的虚函数 169虚函数的限制……… 16.10类的冗余… 363 16.11克服冗余带来的问题…… 16.12类的分解……… …371 16.13抽象类 375 16.14由抽象类派生具体类……………………… 377 16.15纯虚函数的需要性 378 小结 练习……………………………………………………… 第17章多量继承… 17.1多继承如何工作 172继承的模糊性… 382 173虚拟继承 s383 174多继承的构造顺序 175继承的访问控制… 176保护继承与私有继承…………………………………………391 小结…………… 练习 …………………394 第18章运算符重载… 18.1运算符重载的需要性……… 18.2如何重载运算符……… 183值返回与引用返回 84运算符作成员函数 185重载增量运算符 405 18.6转换运算符 18.7赋值运算符… 410 小结 413 练习 X
第19章0流 ……415 19.1prn和 scanf的缺陷 415 19.2O标准流类… 193文件流类…………… 418 194串流类………… 195控制符 42 196使用L0成员函数… 197重载插入运算符 198插入运算符与虚函数 431 199文件操作 ……43 小结 练习………………………… 437 第20章模板 438 20.1模板的概念 438 202为什么要用模板… 439 20.3函数模板 20.4重载模板函数 205类模板的定义… 20.6使用类模板 207使用标准模板类库: Josephus问题 小 练习 450 第21章异常处理… 451 21.1异常的概念 21.2异常的基本思想 452 21.3异常的实现 21.4异常的规则… 21.5多路捕捉……………… 21.6异常处理机制…………… 21.7使用异常的方法… 小结 练习 參考文献… 中击由,非
第一部分C++过程化语言基础 第1章C++入门 C+是一门优秀的程序设计语言。C++比C更容易为人们所学习和掌握并且以其独 特的语言机制在计算机科学领域中得到广泛的应用。学习本章后,要求了解C+语言的概 念,了解C与C++之间的关系,了解C++语言对程序设计方法的支持,了解C++程序开发 的过程,了解简单的C+程序结构学会最简单的C++程序开发。 1.1从C到C+ C语言是贝尔实验室的 Dennis ritchie在B语言的基础上开发出来的,1972年在一台 DEC PDP-1计算机上实现了最初的C语言。C是作为UNX操作系统的开发语言而开始 广为人们所认识。实际上,当今许多新的重要的操作系统都是用C或C+编写的。在过去 20年内,C语言已经能够用在绝大多数计算机上了。C语言是与硬件无关的。由于C语言 的严谨设计,使得把用C语言编写的程序移植到大多数计算机上成为可能。到70年代末,C 已经演化为现在所说的“传统的C语言”。 Kernighan和 Ritchie在1978年出版的《TheC Programming Language)书中全面地介绍了传统的C语言,这本书已经成为最成功的计算机 学术著作之 C语言在各种计算机上的快速推广导致了许多C语言版本。这些版本虽然是类似的, 但通常是不兼容的。对希望开发出的代码能够在多种平台上运行的程序开发者来说,这是 他们面临的一个严重的问题。显然,人们需要一种标准的C语言版本。为了明确地定义与 机器无关的C语言,1989年美国国家标准协会制定了C语言的标准( ANSI C)。 Kernighan和 Ritchie编奢的第二版( The C programming Languag)(1988年版)介绍了ANsC的全部内容。 至此,C语言以其如下独有的特点风靡了全世界 (1)语言简洁紧凑,使用方便灵活。C语言只有32个关键字,程序书写形式自由。 (2)丰富的运算符和数据类型。 (3)C语言可以直接访问内存地址,能进行位操作使其能够胜任开发操作系统的工 (4)生成的目标代码质量高,程序运行效率高
(5)可移植性好。 C语言盛行的同时,也暴露出它的局限 (1)C类型检查机制相对较弱,这使得程序中的一些错误不能在编译时发现。 2)C本身几乎没有支持代码重用的语言结构,因此一个程序员精心设计的程序,很难 为其他程序所用。 (3)当程序的规模达到一定的程度时,程序员很难控制程序的复杂性。 为了满足管理程序的复杂性需要,1980年,贝尔实验室的 Bjarne Stroustrup开始对C迸 行改进和扩充。最初的成果称为带类的C",1983年正式取名为C++,在经历了3次C+ 修订后,于1994年制定了 ANSI C+标准的草案。以后又经过不断完善,成为目前的C++。 C++仍在不断发展中。 C++包含了整个C,C是建立C++的基础。C+包括C的全部特征属性和优点,同时 添加了对面向对象编程(0OP)的完全支持。 12程序与语言 1.程序 程序是以某种语言为工具编制出来的动作序列,它表达了人的思想。计算机程序是用 计算机程序设计语言所要求的规范书写出来的一系列动作,它表达了程序员要求计算机执 行的操作。 对于计算机来说,组机器指令就是程序。当我们说机器代码或者机器指令时,都是指 的程序,它是按计算机硬件设计规范的要求,编制出来的动作序列 对于使用计算机的人来说程序员用某高级语言编写的语句序列也是程序。程序通常 以文件的形式保存起来。所以源文件源程序和源代码都是程序。 程序是任何有目的的预想好的动作序列。它是一种软件。 计算机要运转起来需要一整套可运行软件,即计算机程序。 学术界对程序的定义是比较严格的,这里不作详述。 2.程序语言的发展 最早程序员使用最原始的计算机指令,即机器语言程序。只有机器语言才能为机器所 识别和运行。这些指令由一串二进制的数表示。不久,发明了汇编语言,它可以将机器指令 映射为一些能被人读懂的助记符如ADD,SUB。程序员运行汇编程序将用助记符写成的源 程序转换成机器指令然后再运行机器指令程序得到所要的结果。那时编写程序的都是 计算机专业人员,编写程序的语言都是低级的或较低级的。 以后随着硬件的发展,Fomn,BASC, Pascal,C等几十种甚至几百种高级语言应运而 生,中间经历了严酷的优胜劣汰过程最后剩下的是一些比较优秀的高级语言。C++首当 其冲。 多年来计算机程序的主要目标是力求编写出短小的代码以使运行速度更快。因为硬 件成本和上机运行费很高。当计算机变得更小、更廉价速度更快时程序员开发程序维护
程序的费用急剧上升,而计算机硬件和运行的成本快速下降,程序设计的目标也就发生了变 化 在程序正确的前提下可读性易维护可移植是程序设计首要的目标。所谓可读就是 使用良好的书写风格和易懂的语句编写程序。所谓易维护,是指当业务需求发生变化时,不 需要太多的开销就可以扩展和增强程序的功能。所谓可移植是指编写的程序在各种计算 机和操作系统上都能运行,并且运行结果一样 3.高级语言和低级语言 C++语言是高级语言机器语言是低级语言汇编语言基本上是低级语言。例如:对于 C++语言的语句: a=3始a~2换b+1;//3a-2b+1的值赋给a 写成汇编语言和对应的机器语言为 mov eax, DWORD PTR a s Lebpl 8b Ec ea eax, DWORD PTR [eax eax *2] 8a 04 40 mov ecx, DwORD PTR b.s (ebp 84af8 dd ecx, ecx 2b cl Inc eax mov DWORD PTR a. s Lebel,eax 8945E 第一条命令是将a放入寄存器ax中(ebp是数据段的指针,a.$是变量a的偏移位 置 第二条命令是将eax的内容加上2倍的eax内容放到eax中,即eax中值为3*ao 第三条命令是将b放人寄存器e中。 第四条命令是将ex的内容加上ex,即ex中的值为2*b 第五条命令是将eax减去ex的值(3*a-2*b)放入eax 第六条命令是eax的值加1。此时,eax中的值为3*a-2米b+1 最后一条命令是将寄存器eax的值放入a变量中。即实现a=3“a-2*b+1 可以看出,程序语言越低级,描写程序越复杂,指令越难懂。语言越低级,就越靠近机 器,越高级,就越靠近人的表达与理解。 程序语言的发展,总是从低级到高级,直到可以用人的自然语言来描述。 程序语言的发展,也是从具体到抽象的发展过程。编制一个表达式,无须将表达式的具 体操作过程播述出来,否则人会感到太累,大量的精力会被无谓地浪费,无法进行更大规模 的设计与思考。而低级语言则必须详尽地描述仼何操作。所以抽象表达能力越强,语言越 高级。 4.C与C+ C++语言包括过程性语言部分和类部分。过程性语言部分与C并无本质的差别,无非 版本提高了,功能增强了。类部分是C中所没有的,它是面向对象程序设计的主体。要学 习面向对象程序设计,首先必须具有过程性语盲的基础。所以学习C十,必先学习其过程