本书系统地介绍了面向对象技术及C++语言的相关知识。全书分三篇,共10章。主要内容包括C++语言的基本概念和基本语法,面向对象的重要特征——类与对象、继承与派生、运算符的重载,以及C++语言的一些高级主题——异常处理、模板、流库。第2~10章后面均附有习题。
本书采用循序渐进的方式进行介绍,语言严谨、求实。书中案例具有典型性、知识面覆盖广、实用性强。本书内容条理清晰、层次分明,书中还穿插了许多计算机语言编程中常见问题的解决方法和使用技巧。系统化的介绍、精彩的案例剖析,再加上编程技巧的穿插,必定会让本书读者受益匪浅。
本书可作为高等院校本、专科学生学习C++语言的教材,也可供读者自学和参考。
本书特色:
全书选材适当,内容易学易懂,讲解具体详实,层次分明,条理清晰,将理论与实际作了充分的融合。
针对C++语言较难的特点,本教材在结构安排上作了精心的设计。全书分为初级、中级、高级三篇,循序渐进,重点突出。本书既有充分的理论讲解,又有大量的程序实例;既能奠定读者坚实的程序设计基础,又能让读者体会到C++面向对象程序设计的精髓;既融合了教师多年的教学精华,又博采了多家经典书籍之长。
为了便于读者巩固所学内容,每章后都附有习题。
初 级 篇
第1章 引论 3
1.1 C++ 语言概述 3
1.2 面向对象语言的基本概念 3
1.2.1 对象 3
1.2.2 类 4
1.2.3 封装 4
1.2.4 继承 5
1.2.5 多态性 6
1.3 面向对象的思维与方法 7
1.3.1 面向对象是一种认知方法学 7
1.3.2 面向对象方法与结构化程序设计方法 7
第2章 C++ 编程基础 9
2.1 概述 9
2.2 常量与变量 9
2.2.1 标识符 9
2.2.2 常量 9
2.2.3 变量 10
2.3 基本数据类型 10
2.3.1 整型数据 10
2.3.2 实型数据 11
2.3.3 字符型数据 12
2.4 复合数据类型 14
2.4.1 数组 14
2.4.2 结构 18
2.4.3 联合 21
2.4.4 枚举 22
2.5 指针基础 23
2.5.1 指针的基本概念和定义 23
2.5.2 指针变量的引用 24
2.6 运算符及其使用 26
2.6.1 赋值运算符 26
2.6.2 数学运算符 26
2.6.3 关系运算符和逻辑运算符 27
2.6.4 ?运算符 28
2.6.5 自增和自减运算符 28
2.6.6 位运算符 29
2.6.7 逗号运算符 29
2.6.8 sizeof运算符 30
2.7 C++中的基本输入和输出 30
2.8 C++程序语句 32
2.8.1 简单语句和复合语句 32
2.8.2 条件控制语句 33
2.8.3 循环控制语句 34
2.9 程序实例 39
习题 42
第3章 函数 44
3.1 概述 44
3.2 函数定义 44
3.2.1 函数名 44
3.2.2 函数参数 45
3.2.3 返回类型 45
3.2.4 函数体 46
3.3 函数的作用域规则 48
3.3.1 局部变量 48
3.3.2 全局变量 49
3.3.3 静态存储变量 50
3.4 函数调用 51
3.4.1 函数调用的基本形式 51
3.4.2 函数的递归调用 53
3.4.3 调用C++系统函数 55
3.5 const类型修饰符 57
3.5.1 const常量 57
3.5.2 函数的const参数 59
3.5.3 函数的const返回值 59
3.5.4 const函数 59
3.6 函数与指针 60
3.6.1 指针和函数参数 60
3.6.2 引用参数 63
3.6.3 指向函数的指针 63
3.7 函数重载 66
3.7.1 函数重载的意义 66
3.7.2 重载函数名 67
3.7.3 默认参数 70
3.8 标识符作用域 72
3.8.1 局部作用域 72
3.8.2 文件作用域 72
3.8.3 函数原型作用域 73
3.8.4 函数作用域 74
3.9 编译预处理 74
3.9.1 宏定义 74
3.9.2 文件包含 76
3.9.3 条件编译 76
3.10 内联函数 77
3.11 main函数 79
3.12 程序实例 80
习题 82
第4章 指针. 引用与动态内存分配 84
4.1 概述 84
4.2 指针变量的声明与操作 85
4.3 用const来限定指针 86
4.3.1 指向常量的指针 86
4.3.2 指针常量 88
4.3.3 指向常量的指针常量 88
4.4 指针与数组 89
4.5 指针与字符串 91
4.6 引用 93
4.7 动态内存分配 97
4.7.1 new与delete 97
4.7.2 指针与动态数组 98
4.8 程序实例 99
习题 103
中 级 篇
第5章 类与对象 107
5.1 概述 107
5.2 类的定义与使用 107
5.3 构造函数与析构函数 111
5.3.1 简单的构造函数 111
5.3.2 析构函数 115
5.3.3 重载构造函数 117
5.3.4 拷贝构造函数 118
5.4 this指针 119
5.5 友元函数和友元类 122
5.5.1 友元函数 122
5.5.2 友元类 124
5.6 静态成员 127
5.6.1 静态数据成员 127
5.6.2 静态成员函数 130
5.7 内联成员函数 132
5.8 const对象和const成员函数 133
5.9 对象数组和指向对象的指针 136
5.9.1 对象数组 136
5.9.2 指向对象的指针 137
5.10 指向类成员的指针 139
5.10.1 指向类数据成员的指针 139
5.10.2 指向成员函数的指针 140
5.11 动态对象的创建 141
5.12 程序实例 143
习题 147
第6章 继承与派生 151
6.1 概述 151
6.2 派生类的概念 151
6.2.1 基类和派生类 151
6.2.2 继承方式 154
6.2.3 调整访问声明 159
6.2.4 类层次中的访问规则 162
6.2.5 派生类的构造函数和析构函数 165
6.3 多继承 168
6.3.1 多继承的概念 168
6.3.2 虚基类 172
6.4 多态性与虚函数 177
6.4.1 指向基类对象的指针指向派生类对象 177
6.4.2 多态性 179
6.4.3 虚函数 181
6.4.4 纯虚函数及抽象类 188
6.4.5 构造函数与虚析构函数 190
6.5 程序实例 192
习题 196
第7章 运算符重载和类型转换 199
7.1 概述 199
7.2 运算符重载 199
7.2.1 运算符重载的语法形式 199
7.2.2 一元和二元运算符 203
7.2.3 用成员函数重载运算符 204
7.2.4 用友元函数重载运算符 206
7.2.5 几种特殊运算符的重载 212
7.3 类特有的操作符new和delete 221
7.3.1 操作符new和delete简介 221
7.3.2 数组操作符new[]和delete[] 225
7.3.3 定位操作符new()和delete() 226
7.3.4 指针悬挂问题 228
7.4 类型转换 233
7.4.1 标准类型转换为类类型 234
7.4.2 类类型转换函数 236
7.5 程序实例 242
习题 244
高 级 篇
第8章 异常处理 249
8.1 概述 249
8.2 何时使用异常处理 249
8.3 异常处理的基本语法 250
8.3.1 异常处理的语法 250
8.3.2 异常的类型 252
8.4 try. catch和throw语句 252
8.5 标准C++库中的异常类 260
8.6 程序实例 261
习题 270
第9章 模板 271
9.1 概述 271
9.2 函数模板和模板函数 271
9.2.1 函数模板和模板函数的概念 271
9.2.2 重载函数模板 274
9.3 类模板和模板类 275
9.4 程序实例 279
习题 298
第10章 流库 299
10.1 概述 299
10.2 C++ I/O流库 299
10.2.1 C++为什么要有自己的I/O系统 299
10.2.2 流的概念 300
10.2.3 C++流类的层次结构 301
10.3 输入流 302
10.3.1 构造输入流对象 302
10.3.2 使用提取运算符 303
10.3.3 输入流操纵符 303
10.3.4 输入流成员函数 303
10.4 输出流 305
10.4.1 构造输出流对象 305
10.4.2 使用插入运算符和控制格式 306
10.4.3 输出文件流成员函数 306
10.4.4 二进制输出文件 307
10.5 格式控制 308
10.5.1 用iso类成员函数格式化 308
10.5.2 用操纵函数控制格式 311
10.6 文件I/O 313
10.6.1 文件的打开和关闭 314
10.6.2 文件的读写 315
10.7 程序实例 317
习题 322
当今世界正处于科学技术突飞猛进. 知识经济初见端倪. 国际竞争日趋激烈的时代. 在综合国力的形成中, 教育处于基础的位置, 劳动者的素质将成为决定国力强弱的一个重要因素. 这对于培养21世纪的高素质人才提出了更加迫切的要求. 教材是教学内容和教学方法的载体, 是学生学习和教师教学的基本工具. 因此, 高等教育的教材建设也需要与时俱进, 快速发展.
本教程分为初级篇. 中级篇. 高级篇. 在奠定读者坚实的程序设计基础的同时, 大量笔墨用于了讲述C++面向对象的程序设计上.
面向对象技术是近年来迅速发展的一个研究领域, 它对信息科学. 软件工程. 人工智能. 系统工程和认知科学等学科都有重要的影响, 尤其是在计算机科学与技术的各个方面影响深远. 面向对象技术的出现被认为是程序设计方法学的一场实质性革命, 它与传统的结构化程序设计相比, 具有很多优点. 这种方法从根本上改变了人们以往设计软件的思维方式, 从而使程序员摆脱了具体的数据格式和过程的束缚, 将精力集中于要处理对象的设计和研究上, 极大地减少了软件开发的繁杂性, 提高了软件开发的效率.
C++语言是一种面向对象程序设计语言, 但不是纯面向对象语言, 而是混合型的面向对象语言, 它在过程语言中增加了面向对象的结构. 这种特性使得C++语言保持与C语言的兼容, 使许多C语言代码不经修改就可以为C++语言使用. 用C++语言编写的程序可读性更好, 代码结构更合理, 可以直接在程序中影射问题空间的结构. C++可以为面向对象技术提供全面支持, 它是实现面向对象技术比较通行和适用的手段, 要想理解和掌握C++语言, 离不开面向对象技术的指导, 而介绍面向对象技术也必须结合C++语言的运用.
本书分三篇共10章. 初级篇包括第1~4章. 第1章主要介绍面向对象技术的基本概念和特征. 第2章到第4章主要讲述了C++语言的基础知识, 并讨论了一些从C过渡到C++的语言变化, 包括C++语言的数据类型. 运算符. 基本语句. 函数. 指针. 引用以及动态内存分配等. 中级篇包括第5~7章, 集中讨论了C++面向对象的语言成分和相关的程序设计技术. 第5章介绍了C++类的定义及其封装性的实现, 包括构造函数和析构函数的作用和定义方式以及C++中的一些特殊概念. 第6章主要介绍继承和派生类的定义和使用, 引入了虚函数的概念, 并讲解了多态性在C++中的体现. 第7章介绍了运算符的重载和C++中的类型转换. 高级篇包括第8~10章, 介绍了C++中的一些高级主题. 第8章介绍了异常, 讲述了C++是如何利用类和对象来管理异常的. 第9章介绍了模板, 它是C++一个较新的特性. 第10章介绍了C++的I/O流库. 在每章结束之前, 结合本章的内容, 我们都给出了典型的程序实例. 为便于巩固所学的知识, 在第2~10章的最后还附有部分自测习题, 可供读者亲自实践, 积累编程经验之用.
本书由徐谡主编, 徐立. 张晓. 张浩淼. 魏丙楠. 杨先凤编著. 另外, 本书在编写的过程中, 得到了众多老师和朋友的支持, 在此向所有为此书付出辛勤工作的人员表示衷心的感谢!
本书原被四川省众多高校采用, 现可作为大学本科. 专科学生的教材, 也可供读者自学和参考.
鉴于时间仓促, 加上编者水平有限, 书中纰漏和考虑不周的地方在所难免, 如果对书中的内容或程序有何意见和建议, 恳请专家和广大读者不吝赐教, 批评指正.
编 者
2005年1月