本书第一版被列入“面向21世纪课程教材”,自出版以来,深受读者欢迎。作为给程序设计初学者提供的一本入门教材,它以循序渐进、深入浅出的方式,引导众多学子走进了面向对象程序设计的大门;不少高校采用它作为大学生首门程序设计课程的教材。
在归纳多年教学体会的基础上,我们以继续保持原书的特色为前提,对本书进行了修改和补充,以便相关的概念阐述得更加通俗易懂;并适当地增加了相关的例子,以求使读者在学习时能更好地理解和领会。例如,在第四章增加了常用编译预处理命令的说明;在第四、五、六、七、八、九等章加入了针对性的应用实例等。
程序设计课程教学的宗旨是培养学生掌握程序设计的基本概念、基本思想和方法。我们采用c++语言作为学习面向对象程序设计的工具;但是,不能认为C++就是面向对象程序设计,C++语言仅仅是学习所用的工具而已,它并非学习的最终目标。所以,本书也不打算编成c++大全,涉及C++语言的众多细节、C++语言各种具体版本的制约等内容都未列入本书讨论的范畴。透过现象抓本质,这也正是我们重要的体会。
《面向对象程序设计基础(第2版)》第一版被列入“面向21世纪课程教材”,自出版以来,深受读者欢迎。作为给程序设计初学者提供的一本入门教材,《面向对象程序设计基础》以循序渐进,深入浅出的方式,引导众多学子走进了面向对象程序设计的大门。新版教材在归纳多年教学体会的基础上,以继续保持原书的特色为前提,对前版教材进行了修改和补充,使相关概念阐述得更加通俗易懂,并适当增加了相关的例子,以求使读者在学习时能更好地理解和领会。新版教材内容包括了程序设计基础、程序设计语言、算法与复杂性和软件工程等内容,可作为高校计算机专业本科生入门教材,也可供相关专业高年级学生作为面向对象程序设计课程教材使用。
第一章 程序设计与C++语言初步
1.1 计算机程序
1.1.1 算法
1.1.2 实体
1.1.3 程序
1.1.4 程序设计
1.2 程序设计的演变
1.2.1 早期程序设计
1.2.2 结构化程序设计
1.2.3 面向对象程序设计
1.3 程序设计语言的定义
1.3.1 语法和语义
1.3.2 字符集
1.3.3 Backus-Naur范式
1.3.4 语法图
1.4 C++语言的程序结构
1.4.1 C++语言程序的组成
1.4.2 C++语言程序的基本结构
1.4.3 C+4-语言程序的退化结构
1.5 C++语言程序的运行
1.6 面向对象程序设计
1.6.1 面向对象程序设计过程
1.6.2 面向对象程序设计的特征
本章小结
练习与思考题
上机实习题
第二章 基本数据类型
2.1 数据类型概述
2.1.1 类型
2.1.2 类型的作用
2.1.3 C++语言的类型
2.2 保留字、标识符、常量与变量
2.2.1 单词
2.2.2 保留字
2.2.3 标识符
2.2.4 选择合适的标识符
2.2.s常量与变量
2.2.6 简单输入/输出
2.3 基本数据类型
2.3.1 字符类型
2.3.2 整数类型
2.3.3 浮点类型和双精度类型
2.3.4 字符串常量
2.3.5 符号常量
2.4 运算符与表达式
2.4.1 表达式
2.4.2 表达式的运算次序
2.4.3 C++的运算符
2.4.4 算术运算
2.4.5 关系运算
2.4.6 逻辑运算
2.4.7 位运算
2.4.8 条件运算
2.4.9 sizeof运算
2.4.10 赋值运算
2.4.11 逗号运算
2.4.12 表达式与运算符的应用举例
2.5 类型之问的关系
2.5.1 隐式类型转换
2.5.2 强制类型转换
2.6 一个简单的应用程序
本章小结
练习与思考题
上机实习题
第三章 基本控制结构
3.1 程序的基本控制结构
3.1.1 C++语言的简单语句
3.1.2 单入口/单出口控制结构
3.1.3 结构化程序设计工具
3.2 选择结构
3.2.1 if语句
3.2.2 switch语句
3.3 循环结构
3.3.1 while语句
3.3.2 do-while语句
3.3.3 for语句
3.3.4 一个简单的循环例子
3.3.5 设计正确的循环
3.4 简单程序设计举例
3.4.1 问题
3.4.2 求解问题的精美算法
3.4.3 求解问题的原始算法
本章小结
练习与思考题
上机实习题
第四章 函数
4.1 C++语言的函数
4.1.1 例程与函数
4.1.2 函数的建立与使用
4.1.3 两个简单的例子
4.2 函数的声明与调用
4.2.1 函数声明
4.2.2 return语句
4.2.3 函数调用
4.2.4 函数与模块
4.2.5 内联函数
4.3 参数传递
4.3.1 参数传递方式
4.3.2 按值调用
4.3.3 缺省参数
4.4 作用域与生存期
4.4.1 标识符的作用域
4.4.2 C++程序的存储组织
4.4.3 变量的生存期
4.5 局部变量与全局变量
4.5.1 局部变量
4.5.2 全局变量
4.5.3 局部变量与全局变量的讨论
4.6 变量的存储类别
4.6.1 自动变量和寄存器变量
4.6.2 静态变量
4.6.3 外部变量
4.7 递归程序设计
4.7.1 简单递归程序
4.7.2 梵塔问题
4.8 预处理命令
4.8.1 文件包含
4.8.2 宏定义
4.8.3 条件编译
4.9 C++语言的库函数
4.9.1 库函数的用法
4.9.2 常用数值函数
4.9.3 常用字符函数
本章小结
练习与思考题
上机实习题
第五章 类与对象
5.1 类的引人
5.1.1 循环计数器
5.1.2 关于循环计数器的讨论
5.1.3 类作为构造程序的基本单位
5.2 类的定义
5.2.1 类声明
5.2.2 类成员的访问控制
5.2.3 类界面与类实现
5.2.4 标识符的类作用域
5.3 对象的创建
5.3.1 对象声明
5.3.2 使用对象成员
5.3.3 对象的生存期
5.4 对象的初始化
5.4.1 构造函数
5.4.2 析构函数
5.4.3 对象成员的初始化
5.5 使用类与对象构造程序的实例
5.5.1 模拟数字式时钟
5.5.2 模拟加油站油泵的对象工作
5.5.3 单实例对象类
5.6 关于类与对象的进一步讨论
5.6.1 基本数据类型与对象
5.6.2 抽象数据类型
5.6.3 设计良好的类界面
5.6.4 再论对象
5.6.5 下一步
本章小结
练习与思考题
上机实习题
第六章 复合数据类型
6.1 变量与赋值的进一步讨论
6.2 指针类型
6.2.1 指针的声明
6.2.2 指针的引用
6.2.3 指针的运算
6.2.4 按引用调用的参数传递方式
6.3 数组类型
6.3.1 一维数组的声明
6.3.2 一维数组元素的引用与初始化
6.3.3 数组作为函数的参数
6.3.4 一维数组应用举例
6.3.5 二维数组的声明
6.3.6 二维数组元素的引用与初始化
6.3.7 二维数组应用举例
6.3.8 指针与数组
6.3.9 指针数组与数组指针
6.4 字符串
6.4.1 字符串常量与变量
6.4.2 字符串数组
6.4.3 关于字符串操作的库函数
6.4.4 字符串与指针数组应用的例子(主函数带参数)
6.5 指向对象的指针
6.5.1 对象指针
6.5.2 对象的动态创建与撤销
6.5.3 对象的复制与比较
6.6 指向函数的指针
6.6.1 函数指针
6.6.2 函数指针作为参数
6.6.3 主动对象
6.7 结构类型、枚举类型与类型别名
6.7.1 结构类型
6.7.2 枚举类型
6.7.3 类型别名
6.8 高级数据结构应用
本章小结
练习与思考题
上机实习题
第七章 继承机制
7.1 继承的基本概念
7.2 C++语言的继承机制
7.3 继承与构造函数、析构函数
7.4 继承成员的调整
7.5 多重继承
7.6 重复继承
7.7 优化类层次设计
本章 小结
练习与思考题
上机实习题
第八章 多态性
8.1 多态性的基本概念
8.2 函数重载
8.3 拷贝构造函数
8.4 运算符重载
8.5 虚函数
8.6 抽象类
本章 小结
练习与思考题
上机实习题
第九章 类属机制
9.1 类属的基本概念
9.2 类模板
9.3 函数模板
本章 小结
练习与思考题
上机实习题
第十章 输入/输出流
10.1 C++语言输入/输出
10.2 C++的流类库
10.3 格式化输入/输出
10.4 常用成员函数输入/输出
10.5 设计自己的输入/输出操作
10.6 检测流操作的错误
10.7 文件流
本章 小结
练习与思考题
上机实习题
第十一章 面向对象软件构造
11.1 软件质量
11.2 程序断言机制
11.3 异常处理机制
11.4 可重用构件库
11.5 面向对象软件构造
11.6 实例研究:Petri网图形编辑器的讨论
第十二章 结束语
12.1 程序设计风范
12.2 面向对象程序设计语言
本章 小结
练习与思考题
上机实习题
附录 A ASCII编码表
附录 B 主要术语索引
附录 C 主要参考文献
由于二进制数据不便书写与阅读,所以常用八进制或十六进制取代二进制。在c++语言中,八进制数用“0”开始,十六进制数用“0x”开始,其他表示十进制数。对于一个给定的字节01001010,相应的八进制、十六进制与十进制表示分别是0112、04和74。这个字节表示的到底是什么数据呢?这可能有多种解释。如果将它理解为无符号整数,则这个字节表示的是正整数+74;如果将它理解为一个AscII编码的字符,这个字节表示的又是英文字母“J”。由此可见,要理解一个数据到底表达的是什么含义还必须依赖于这个数据应做何解释,这种对数据的解释称为类型(type)。在程序设计中,类型有重要的意义:程序中所有的数据都属于特定的类型,数据的表示方式、取值范围以及对数据可以使用的操作都由数据所属的类型决定。 类型可以帮助编译程序生成高效率的目标代码。为了让编译程序了解数据所属的类型,通常程序设计语言都遵循“先声明、后使用”的原则,即在使用一个数据之前必须先声明它属于哪种类型。这样,编译程序在生成目标代码时,就能知道需要分配多大的存储空间以及如何引用这个数据。类型对于编写程序的程序员也有重要意义。由于程序中的每一个数据都明确地属于一种类型,所以这些数据的取值范围、可以操作的运算等信息就可通过数据所属的类型显式地反映出来,提高了程序的可读性和可理解性。在程序中使用数据时,可以根据数据的特点(如是字符还是数值、有无小数等)与可能的取值范围决定数据的类型。一个数据属于某一特定类型后,在该数据上允许操作的运算也就确定了下来。例如,两个整数可以进行加、减、乘、除、整除、取模等运算,而两个字符串则可进行比较、连接、判断子串等操作,但不可做四则运算。