C++的某些知识是在学习C时没有学到的,因此,增大了学习的难度。另外,一开始接触类的知识,没有使用类的概念,也很难接受新的思维方法。所以本书将必要的基础知识通过使用类来讲解,在学生对类的性质有了感性认识之后,再深入讨论,这样比较接近人的思维规律。
本书根据高职院校的特点,进行合理取舍,展现它们的最新特征。全书把重点放在程序设计方法上,将内容划分为两大部分:面向过程和面向对象。在讲授面向过程时,直接引入使用对象的概念,通过使用对象设计面向过程的程序,熟悉使用对象的方法,通过使用C++提供的类,建立对象行为及实例的概念,为面向对象程序设计打下基础。
本书不要求读者学过C语言,面向过程设计部分的思想也适合C语言,只是实现有些差异而已,所以也可以用来学习C语言编程。这部分还介绍了面向对象和面向过程所共有的许多设计方法,所以对于已经学过C语言的读者,还必须重新学习这部分的内容以建立面向对象的概念。
本书取材新颖、结构合理、概念清楚、语言简洁、通俗易懂、实用性强、易于教学。本书特别适合作为高职高专的教材,也可以作为培训班教材,自学教材及工程技术人员的参考书。
第1章 面向对象程序设计基础知识
1.1 面向过程的程序设计方法
1.1.1 自然语言与计算机语言之间的鸿沟
1.1.2 面向过程与结构化程序设计
1.2 面向对象的程序设计方法
1.3 面向对象语言的发展
1.4 C++的面向过程和面向对象程序设计
1.5 C++面向对象程序设计特点
1.5.1 对象
1.5.2 抽象和类
1.5.3 封装
1.5.4 继承
1.5.5 多态性
1.6 数据对象和数据类型
1.6.1 数据对象、变量和常量
1.6.2 数据类型
1.6.3 基本数据类型的实现
1.7 本书的结构
1.8 习题
第2章 C++程序设计基础
2.1 C++的基本数据类型和表达式
2.1.1 初识C++ 的函数和对象
2.1.2 标识符
2.1.3 变量对象
2.1.4 基本数据类型
2.1.5 变量对象的存储类型
2.1.6 常量对象
2.1.7 匈牙利命名法
2.1.8 算术运算符和运算表达式
2.1.9 赋值运算符与赋值表达式
2.1.10 逗号运算符与逗号表达式
2.2 面向对象的标记图
2.2.1 类和对象的UML标记图
2.2.2 表示对象的结构与连接
2.2.3 使用实例
2.2.4 对象、类和消息
2.3 使用类和对象实例
2.3.1 使用C++的string对象
2.3.2 使用string类的典型成员函数实例
2.3.3 使用对象小结
2.4 典型例题及错误分析
2.4.1 典型例题
2.4.2 初学者最容易出现的语法错误
2.4.3 容易出现的其他错误
2.5 程序的编辑、编译和运行的基本概念
2.6 实验 如何编辑、编译、调试和运行一个实际程序
2.7 习题
第3章 结构化编程基础
3.1 典型C++程序结构
3.1.1 函数和函数原型
3.1.2 const修饰符和预处理程序
3.1.3 程序注释
3.1.4 程序语句
3.1.5 大小写字母的使用
3.1.6 程序的书写格式
3.1.7 数据的简单输入输出格式
3.2 关系运算与逻辑运算
3.3 结构化程序设计概述
3.4 控制选择结构
3.4.1 用if语句实现选择结构设计
3.4.2 用switch 语句实现选择结构设计
3.5 循环控制结构设计
3.5.1 while语句
3.5.2 do while语句
3.5.3 for语句
3.5.4 break语句、countinue语句及goto语句
3.5.5 控制语句的嵌套
3.6 典型例题及错误分析
3.6.1 典型例题
3.6.2 错误分析
3.7 实验 编程调试实验
3.8 习题
第4章 构造类型初探
4.1 指针
4.1.1 构造指针类型
4.1.2 指针类型及指针运算
4.1.3 对指针使用const限定符
4.1.4 进一步讨论指针
4.2 引用
4.3 数组
4.3.1 一维数组
4.3.2 数组与指针的关系
4.3.3 多维数组
4.3.4 字符串数组和string对象
4.3.5 指针数组
4.3.6 命令行参数
4.4 类型定义关键字typedef
4.5 枚举
4.6 结构
4.6.1 结构定义及其对象的初始化
4.6.2 结构数组
4.6.3 结构指针
4.6.4 动态分配内存
4.7 联合
4.8 使用数组与指针易犯的错误
4.8.1 数组使用错误
4.8.2 指针使用不当
4.9 实验 综合实验
4.10 习题
第5章 函数和函数模板
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.3.4 函数返回值作为参数
5.4 内联函数
5.5 函数重载
5.6 函数模板
5.7 解题和算法描述
5.7.1 计算机解题
5.7.2 常用过程设计的算法描述方法
5.8 综合实例
5.9 错误分析
5.10 文件中的函数调用
5.10.1 使用多个文件进行模块化设计
5.10.2 头文件和函数原型的作用
5.10.3 组合为一个工程项目
5.10.4 使用文件包含的方法
5.10.5 #define和const的异同
5.11 实验 编辑多文件程序实验
5.12 习题
第6章 对象和类的基础知识
6.1 类及其实例化
6.1.1 定义类
6.1.2 使用类的对象
6.1.3 数据封装
6.1.4 成员函数重载及默认参数
6.1.5 this指针
6.1.6 一个类的对象作为另一个类的成员
6.2 类和对象的性质
6.2.1 对象的性质
6.2.2 类的性质
6.3 结构和联合
6.4 面向对象编程的文件规范
6.4.1 编译指令
6.4.2 编写类的头文件
6.5 实验 使用类和对象的实验
6.6 习题
第7章 类和类模板
7.1 构造函数
7.1.1 定义构造函数
7.1.2 构造函数和运算符new
7.1.3 默认构造函数和默认参数
7.1.4 复制构造函数
7.2 析构函数
7.2.1 定义析构函数
7.2.2 析构函数和运算符delete
7.2.3 默认析构函数
7.3 调用复制构造函数
7.4 重载对象的赋值运算符
7.5 对象成员的初始化
7.6 类模板
7.7 容易混淆的问题
7.8 实验 使用包含构造新类
7.9 习题
第8章 继承和派生
8.1 继承和派生的基本概念
8.2 单一继承
8.2.1 单一继承的一般形式
8.2.2 派生类的构造函数和析构函数
8.2.3 类的保护成员
8.2.4 访问权限和赋值兼容规则
8.3 继承类模板
8.4 多重继承
8.5 二义性及其支配规则
8.5.1 二义性和作用域分辨符
8.5.2 派生类支配基类的同名函数
8.6 典型问题分析
8.7 实验 公有派生的赋值兼容性规则
8.8 习题
第9章 多态性和虚函数
9.1 多态性
9.1.1 静态联编中的赋值兼容性及名字支配规律
9.1.2 动态联编的多态性
9.2 虚函数
9.2.1 虚函数的定义
9.2.2 虚函数实现多态性的条件
9.2.3 进一步探讨虚函数与实函数的区别
9.2.4 构造函数和析构函数调用虚函数
9.2.5 纯虚函数与抽象类
9.3 多重继承与虚函数
9.4 容易混淆的问题
9.5 实验 虚函数与多态性
9.6 习题
第10章 类的成员和对象
10.1 静态成员
10.2 友元函数
10.3 const对象和volatile对象
10.4 数组和类
10.5 实验 友元函数和常对象性质实验
10.6 习题
第11章 运算符重载及流类库
11.1 运算符重载
11.1.1 运算符重载的实质
11.1.2 类运算符和友元运算符的异同
11.1.3 ++和--运算符的重载
11.2 流类库
11.2.1 流类库的基本类等级
11.2.2 运算符“<<”和“>>”的重载
11.2.3 格式控制
11.3 文件操作
11.3.1 文件操作方式
11.3.2 常用输出文件流成员函数
11.3.3 二进制输出文件
11.3.4 常用输入流及其成员函数
11.3.5 文件读写综合实例
11.4 实验 文件综合实验
11.5 习题
第12章 面向对象课程设计
12.1 过程抽象和数据抽象
12.2 发现对象并建立对象层
12.3 定义数据成员和成员函数
12.4 如何发现基类和派生类结构
12.5 接口继承与实现继承
12.6 链表
12.6.1 简单的链表实例
12.6.2 改进封装性的实例
12.7 实验 改进链表实验
12.8 习题
附录A 按字母表顺序排序的C和C++保留字
附录B C语言关键字
附录C C语言的printf格式输出函数
附录D C语言的scanf格式输入函数
附录E 主要参考文献
高等职业教育目前已成为我国高等教育的重要组成部分,对于推动我国社伞主义现代化建设起着不可忽视的作用。计算机教育在整个高职教育中有着举足轻重的地位,因为计算机的普及已经涉及到各个行业。对于传统的学习计算机知识的方法即理论为主、应用为辅的教学模式,相对高职教育来说有些不太适合,针对这种情况,就需要一些符合高职教育特点的教材来满足这种需求。
为解决教材供需不平衡的矛盾,北京希望电子出版社与全国高等学校计算机基础教育研究会高职高专专业委员会联合组织国内十几所高职院校,聘请“双师”型教师共同编写针对高职特点的教材30多种,以及实训类教材10多种,并请专家论证了本套教材的体系、风格、结构、内容等方面的可行性与可操作性。该系列教材体现“重在能力素质培养”的目标,结合教育部的教学大纲要求,在实用性、新颖性、可读性几个方面都有所突破。
高职教材建设是教学改革重要的环节,高等职业技术教育专业设置要与劳动力市场需求相结合,教学内容与国家职业标准相衔接。采取“订单教学”的校企合作培养模式,实行学业文凭和职业资格两种证书制度,使一线技术人才,培养实现教学与市场“零距离”、毕业生上岗“零适应期”。这种以市场为导向实行的订单教学,能够直接为用人单位培养实用型人才,是一条富有特色的职教之路,可以保证同学们将来在就业和升学两条渠道上有最大的发展空间。所以,高校就要突出应用技能培养的办学特色,按照人才市场供求信号进行学科、专业和教学内容的调整,以适应社会需要。在培养学生的知识、能力、技能方面都要与其他综合性本科院校有所区别。
本系列教材就是遵循这种订单式教学的需要,一方面是设定系统理论知识的教材,这种教材的内容按照“必需、够用”的原则,构筑坚实的具有高职特色的理论体系基础;另一方面是训练职业动手能力的实训教材,按照“切实、实用”的原则,培养动手能力强的人才。以上两种教材相互配合,既可以单独使用,也可以配套使用。
高职教材建设还在探索中,如何能满足企业对人才的需求,跟上时代发展的步伐,这些都是亟需解决的问题。本丛书旨在抛砖引玉,希望更多的优秀教师参与到教材建设中来,真诚希望广大教师、学生与读者朋友在使用本丛书过程中提出宝贵意见和建议,为下一次的修订与改版做准备,使本丛书日臻完美。
若有投稿或建议,请发至本丛书出版者电子邮件:textbook@bbp.com.cn
计算机科学发展的每一步几乎都在软件设计和程序设计语言中得到充分体现。程序设计方法和技术在各个时期的发展不仅直接导致了一大批风格各异的程序设计语言的诞生,而且对计算机理论、硬件、软件以及计算机应用技术等多方面都产生了深远的影响。
本书把重点放在程序设计方法上,将内容划分为两部分:面向过程和面向对象。在讲授面向过程时,直接引入使用对象的概念,通过使用对象设计面向过程的程序,熟悉使用对象的方法;通过使用C什提供的类,建立对象行为及实例的概念,为面向对象程序设计打下基础。
本书将对象贯穿于每一章,强化对象的概念,以利于概念的建立和学习。全书共分12章。第1章和第2章是程序设计基础,分别介绍基于过程和面向对象程序设计的基本概念,引入面向对象的概念并介绍C什程序和面向对象编程的基础知识。第3章至第5章侧重于过程编程和对象的概念。第3章是结构化编程基础,结合实例,简要介绍C什语言的对象在基于过程设计中的使用方法,以及结构化程序的基本设计原理,既为基于过程的编程打下基础,也加深使用对象的概念。第4章是构造类型初探,介绍以基本类型为基础构造出来的几个典型的构造类型,并简要说明它们的使用方法,从而为程序设计提供新的舞台。第5章是函数,将涉及多文件编程的知识,多文件编程更是面向对象编程必须遵循的原则。第6章至第12章是C++面向对象编程。其中,第6章和第7章是对象和类,这两章首先抽象对象的概念,以便更好地描述对象,然后讨论对象的3大要素并介绍面向对象语言的4大特征,重点介绍在C抖中定义类、建立和使用对象的方法。第8章是继承和派生类,将讨论C什语言继承方面的语法特征和一般的使用方法?第9章是多态性和虚函数,由于多态性是一个与实现有关的概念,因而难于理解和掌握,介绍了运行时的多态性,并通过图解和大量程序实例帮助读者更好地理解多态性。第10章是类的成员和对象,讲述类的基本结构和一些特殊的成员(数据成员及成员函数)。第11章是运算符重载及流类库,介绍运算符重载的基础知识、流类库的概念及使用流类库进行文件存取的基本方法。第12章是面向对象课程设计,将重点讨论一些深入课题及设计实例。另外,每章至少给出一个实验题,实验题的难易程度也不相同。习题中的某些题目也可以作为实验题,学生可以选做一些实验,同时也可避免每届学生雷同。
教育部计算机课程指导委员会副主任委员,中国科学技术大学计算机系高性能计算中心主任陈国良教授、原安徽大学副校长,计算机系程慧霞教授及南京大学计算机系陈本林教授在百忙之中审阅了书稿并提出许多宝贵意见,特此表示感谢。写作中还参考了大量资料,有的收入参考文献之中,还有些没有收入其中。特此对这些作者表示感谢。
孙忱、刘燕君、王晋军、孙捷、周航、葛愿、章守信、潘剑锋、蒋琳等参加了本书的编写工作。尽管我们已经竭尽全力,但因才疏学浅,遗漏之处在所难免,敬请广大同行和读者批评指正。