书籍详情
C++程序设计(现代方法)
作者:白忠建
出版社:人民邮电出版社
出版时间:2019-12-01
ISBN:9787115513731
定价:¥59.80
购买这本书可以去
内容简介
本书以C++ 1y标准为基准,详细介绍了对象和面向对象技术的概念,并围绕案例的求解,深入浅出地介绍了面向对象技术的4个核心思想(数据封装、继承、多态和泛型编程)在C++中的概念、实现机制和语法、编程方法等,其中包括类和对象、运算符重载、继承和派生、虚函数和多态性、模板和泛型编程、流库、多继承、名字空间和异常处理,使读者能够循序渐进地掌握C++的语法以及面向对象程序设计的方法。
作者简介
白忠建 博士,硕士生导师,电子科技大学软件与信息工程学院副教授,长期从事软件工程、程序设计方面的教学与科研工作。先后担任国家软件人才国际培训(成都)基地常务副主任、电子科技大学成都学院计算机系主任兼系党总支书记等职务。
目录
第1章 引论 1
1.1 C++程序概貌 1
1.1.1 编写第一个C++程序 2
1.1.2 程序释义 3
1.2 面向对象的基本概念 5
1.2.1 对象 5
1.2.2 面向对象方法的核心概念 8
1.2.3 面向对象分析、设计和程序设计 8
第2章 C++:一个更好的C 10
2.1 基础类型 10
2.1.1 增强的字面常量 10
2.1.2 bool类型 12
2.1.3 强类型枚举 12
2.2 地址类型 14
2.2.1 指针类型 14
2.2.2 引用类型 16
2.3 类型自动推导 19
2.3.1 decltype关键字 19
2.3.2 auto关键字 20
2.4 运算符和表达式 20
2.4.1 C++特有的运算符 20
2.4.2 lambda表达式 23
2.5 控制结构和语句 25
2.6 异常处理及语句 26
2.6.1 异常以及异常抛出 26
2.6.2 try…catch语句 26
2.7 函数 30
2.7.1 函数的类型 30
2.7.2 函数的参数 30
2.7.3 函数的返回值 33
2.7.4 函数重载 37
2.7.5 回调函数 38
2.8 复杂类型声明的简化 40
2.9 名字空间 41
2.9.1 名字空间的定义 42
2.9.2 using声明和using指令 42
2.9.3 嵌套的名字空间 43
第3章 类:面向对象的基石 44
3.1 案例—链表的实现 44
3.1.1 案例及其实现 44
3.1.2 案例问题分析 49
3.2 类 49
3.2.1 定义类类型和类对象 49
3.2.2 访问控制和数据封装 56
3.2.3 类的静态成员 60
3.2.4 struct和union 62
3.2.5 聚集与组合 62
3.3 类对象的构造、初始化和析构 63
3.3.1 类的构造函数 64
3.3.2 构造函数重载 67
3.3.3 统一初始化 69
3.3.4 析构函数 70
3.3.5 默认和被删除的成员函数 71
3.4 案例的完整解决方案 72
3.5 面向对象方法的应用 74
3.5.1 面向对象分析 75
3.5.2 面向对象设计 76
3.5.3 编码实现 77
第4章 类的高级特性 80
4.1 案例—链表类的复制问题 80
4.1.1 案例及其实现 80
4.1.2 案例问题分析 84
4.2 复制控制 85
4.2.1 复制 85
4.2.2 赋值 86
4.2.3 浅复制和深复制 87
4.2.4 转移对象和转移语义 90
4.2.5 禁止复制 94
4.3 指向类成员的指针 95
4.4 友元 96
4.4.1 友元函数和友元类 96
4.4.2 友元关系的特性 98
4.5 类的const成员和mutable成员 99
4.5.1 类的const成员 99
4.5.2 类的mutable成员 100
4.6 类中的类型名 100
4.6.1 类中的类类型 100
4.6.2 类中的枚举类型 101
4.6.3 类中的typedef和using 102
4.6.4 typename关键字 102
4.7 案例的完整解决方案 102
第5章 运算符重载 106
5.1 案例分析—complex类及
其常规运算 106
5.1.1 案例及其实现 106
5.1.2 案例问题分析 107
5.2 运算符函数重载 108
5.2.1 重载运算符函数的考虑因素 108
5.2.2 运算符函数重载的一般性规则 112
5.3 常用运算符的重载 114
5.3.1 重载赋值运算符 114
5.3.2 重载算术运算符 115
5.3.3 重载关系运算符 119
5.3.4 重载流式输入运算符>>和
输出<<运算符 119
5.4 类型转换 121
5.4.1 标量类型向类类型转换 121
5.4.2 类类型向标量类型转换 122
5.4.3 类类型向类类型转换 123
5.5 重载特殊运算符 124
5.5.1 下标运算符[] 125
5.5.2 指针运算符*和成员选择
运算符?> 129
5.5.3 函数调用运算符() 132
第6章 继承 135
6.1 案例—四边形家族的类描述 135
6.1.1 案例及其实现 135
6.1.2 案例问题分析 137
6.2 继承和派生 139
6.2.1 定义基类和派生类 139
6.2.2 继承的实现机制 141
6.2.3 基类子对象的初始化 142
6.2.4 基类成员的继承 144
6.2.5 重新定义基类成员 147
6.3 赋值兼容原则 148
6.3.1 派生类和基类对象间的赋值 148
6.3.2 引用作用于派生类和基类对象 148
6.3.3 指针作用于派生类和基类对象 149
6.4 多继承 150
6.4.1 多继承的语法 150
6.4.2 虚继承和虚基类 151
6.4.3 多继承面临的其他问题 152
6.5 继承的前提:正确的分类 153
6.5.1 案例—基于角色的分类 154
6.5.2 案例存在的问题 155
6.5.3 案例的改进方案 156
第7章 多态 159
7.1 案例分析—赋值兼容原则的
进一步应用 159
7.1.1 案例及其实现 159
7.1.2 案例问题分析 160
7.2 多态的概念 161
7.2.1 静态多态性 161
7.2.2 动态多态性 162
7.3 虚函数:实现多态的关键 162
7.3.1 虚函数的声明和覆盖 162
7.3.2 虚函数的实现原理 167
7.3.3 虚析构函数 169
7.4 纯虚函数和抽象类 170
7.4.1 纯虚函数 170
7.4.2 抽象类 171
第8章 模板 174
8.1 案例分析—类型带来的困扰 174
8.1.1 案例的设计与实现 174
8.1.2 案例问题分析 178
8.2 变量模板 179
8.2.1 定义和使用变量模板 179
8.2.2 变量模板的特化 180
8.3 函数模板 181
8.3.1 定义和使用函数模板 181
8.3.2 函数模板的重载和特化 183
8.3.3 完美转发 184
8.3.4 折叠表达式 185
8.4 类模板 187
8.4.1 定义和使用类模板 188
8.4.2 类模板的特化 191
8.4.3 类模板的友元 191
8.4.4 类模板的继承和派生 192
8.4.5 类模板的变长模板参数 192
8.4.6 类模板性能的改进 194
8.5 模板的别名 196
8.6 traits技术 198
8.6.1 特性萃取 198
8.6.2 类型萃取 200
8.6.3 随之而来的问题 202
8.7 模板元编程初探 204
8.7.1 模板递归 204
8.7.2 奇异递归模板模式 205
第9章 容器、迭代器和
泛型算法 207
9.1 案例分析—链表类的遍历 207
9.1.1 案例的设计与实现 208
9.1.2 案例问题分析 209
9.2 容器的迭代器 210
9.2.1 迭代器的结构设计 210
9.2.2 迭代器的实现 211
9.3 泛型算法 217
9.3.1 只用到迭代器的泛型算法 217
9.3.2 带更多参数的泛型算法 218
9.3.3 只读算法和写算法 220
9.3.4 泛型算法返回值类型的考虑 221
9.3.5 iterator traits 222
9.4 C++标准模板库STL 224
9.4.1 C++的标准容器类 224
9.4.2 C++的标准泛型算法和
可调用对象 224
9.4.3 C++的标准iterator库 225
第10章 多线程 226
10.1 案例分析—顺序执行的局限 226
10.1.1 案例的设计与实现 226
10.1.2 案例问题分析 226
10.2 关键概念 227
10.2.1 异步 227
10.2.2 进程和线程 227
10.2.3 共享和互斥 228
10.2.4 锁和死锁 228
10.3 C++的多线程库 229
10.3.1 头文件 229
10.3.2 头文件 232
10.3.3 头文件 234
10.3.4 头文件 236
10.4 多线程编程示例 239
10.4.1 系统简要分析 239
10.4.2 系统设计 240
10.4.3 系统实现 241
第11章 面向对象设计的原则 244
11.1 单一职责原则 244
11.2 开闭原则 247
11.3 聚集与组合复用原则 248
11.4 里氏替换原则 248
11.5 依赖倒置原则 249
11.6 接口隔离原则 251
11.7 最少知识原则 252
第12章 C++程序设计案例 257
12.1 案例描述 257
12.2 系统分析 258
12.2.1 MVC设计模式
简介 258
12.2.2 系统的用例模型 259
12.3 系统设计 259
12.3.1 系统体系结构设计 259
12.3.2 对象设计 260
12.3.3 用户界面设计 263
12.4 系统实现 263
附录A C++关键字 274
附录B 常用运算符的优先级和
结合性 275
附录C 使用不同的C++编译器 276
C.1 使用GNU GCC for Linux 276
C.2 使用MinGW 277
C.3 使用Visual Studio 2017(VS 2017) 277
C.4 使用Clang 278
参考文献 280
1.1 C++程序概貌 1
1.1.1 编写第一个C++程序 2
1.1.2 程序释义 3
1.2 面向对象的基本概念 5
1.2.1 对象 5
1.2.2 面向对象方法的核心概念 8
1.2.3 面向对象分析、设计和程序设计 8
第2章 C++:一个更好的C 10
2.1 基础类型 10
2.1.1 增强的字面常量 10
2.1.2 bool类型 12
2.1.3 强类型枚举 12
2.2 地址类型 14
2.2.1 指针类型 14
2.2.2 引用类型 16
2.3 类型自动推导 19
2.3.1 decltype关键字 19
2.3.2 auto关键字 20
2.4 运算符和表达式 20
2.4.1 C++特有的运算符 20
2.4.2 lambda表达式 23
2.5 控制结构和语句 25
2.6 异常处理及语句 26
2.6.1 异常以及异常抛出 26
2.6.2 try…catch语句 26
2.7 函数 30
2.7.1 函数的类型 30
2.7.2 函数的参数 30
2.7.3 函数的返回值 33
2.7.4 函数重载 37
2.7.5 回调函数 38
2.8 复杂类型声明的简化 40
2.9 名字空间 41
2.9.1 名字空间的定义 42
2.9.2 using声明和using指令 42
2.9.3 嵌套的名字空间 43
第3章 类:面向对象的基石 44
3.1 案例—链表的实现 44
3.1.1 案例及其实现 44
3.1.2 案例问题分析 49
3.2 类 49
3.2.1 定义类类型和类对象 49
3.2.2 访问控制和数据封装 56
3.2.3 类的静态成员 60
3.2.4 struct和union 62
3.2.5 聚集与组合 62
3.3 类对象的构造、初始化和析构 63
3.3.1 类的构造函数 64
3.3.2 构造函数重载 67
3.3.3 统一初始化 69
3.3.4 析构函数 70
3.3.5 默认和被删除的成员函数 71
3.4 案例的完整解决方案 72
3.5 面向对象方法的应用 74
3.5.1 面向对象分析 75
3.5.2 面向对象设计 76
3.5.3 编码实现 77
第4章 类的高级特性 80
4.1 案例—链表类的复制问题 80
4.1.1 案例及其实现 80
4.1.2 案例问题分析 84
4.2 复制控制 85
4.2.1 复制 85
4.2.2 赋值 86
4.2.3 浅复制和深复制 87
4.2.4 转移对象和转移语义 90
4.2.5 禁止复制 94
4.3 指向类成员的指针 95
4.4 友元 96
4.4.1 友元函数和友元类 96
4.4.2 友元关系的特性 98
4.5 类的const成员和mutable成员 99
4.5.1 类的const成员 99
4.5.2 类的mutable成员 100
4.6 类中的类型名 100
4.6.1 类中的类类型 100
4.6.2 类中的枚举类型 101
4.6.3 类中的typedef和using 102
4.6.4 typename关键字 102
4.7 案例的完整解决方案 102
第5章 运算符重载 106
5.1 案例分析—complex类及
其常规运算 106
5.1.1 案例及其实现 106
5.1.2 案例问题分析 107
5.2 运算符函数重载 108
5.2.1 重载运算符函数的考虑因素 108
5.2.2 运算符函数重载的一般性规则 112
5.3 常用运算符的重载 114
5.3.1 重载赋值运算符 114
5.3.2 重载算术运算符 115
5.3.3 重载关系运算符 119
5.3.4 重载流式输入运算符>>和
输出<<运算符 119
5.4 类型转换 121
5.4.1 标量类型向类类型转换 121
5.4.2 类类型向标量类型转换 122
5.4.3 类类型向类类型转换 123
5.5 重载特殊运算符 124
5.5.1 下标运算符[] 125
5.5.2 指针运算符*和成员选择
运算符?> 129
5.5.3 函数调用运算符() 132
第6章 继承 135
6.1 案例—四边形家族的类描述 135
6.1.1 案例及其实现 135
6.1.2 案例问题分析 137
6.2 继承和派生 139
6.2.1 定义基类和派生类 139
6.2.2 继承的实现机制 141
6.2.3 基类子对象的初始化 142
6.2.4 基类成员的继承 144
6.2.5 重新定义基类成员 147
6.3 赋值兼容原则 148
6.3.1 派生类和基类对象间的赋值 148
6.3.2 引用作用于派生类和基类对象 148
6.3.3 指针作用于派生类和基类对象 149
6.4 多继承 150
6.4.1 多继承的语法 150
6.4.2 虚继承和虚基类 151
6.4.3 多继承面临的其他问题 152
6.5 继承的前提:正确的分类 153
6.5.1 案例—基于角色的分类 154
6.5.2 案例存在的问题 155
6.5.3 案例的改进方案 156
第7章 多态 159
7.1 案例分析—赋值兼容原则的
进一步应用 159
7.1.1 案例及其实现 159
7.1.2 案例问题分析 160
7.2 多态的概念 161
7.2.1 静态多态性 161
7.2.2 动态多态性 162
7.3 虚函数:实现多态的关键 162
7.3.1 虚函数的声明和覆盖 162
7.3.2 虚函数的实现原理 167
7.3.3 虚析构函数 169
7.4 纯虚函数和抽象类 170
7.4.1 纯虚函数 170
7.4.2 抽象类 171
第8章 模板 174
8.1 案例分析—类型带来的困扰 174
8.1.1 案例的设计与实现 174
8.1.2 案例问题分析 178
8.2 变量模板 179
8.2.1 定义和使用变量模板 179
8.2.2 变量模板的特化 180
8.3 函数模板 181
8.3.1 定义和使用函数模板 181
8.3.2 函数模板的重载和特化 183
8.3.3 完美转发 184
8.3.4 折叠表达式 185
8.4 类模板 187
8.4.1 定义和使用类模板 188
8.4.2 类模板的特化 191
8.4.3 类模板的友元 191
8.4.4 类模板的继承和派生 192
8.4.5 类模板的变长模板参数 192
8.4.6 类模板性能的改进 194
8.5 模板的别名 196
8.6 traits技术 198
8.6.1 特性萃取 198
8.6.2 类型萃取 200
8.6.3 随之而来的问题 202
8.7 模板元编程初探 204
8.7.1 模板递归 204
8.7.2 奇异递归模板模式 205
第9章 容器、迭代器和
泛型算法 207
9.1 案例分析—链表类的遍历 207
9.1.1 案例的设计与实现 208
9.1.2 案例问题分析 209
9.2 容器的迭代器 210
9.2.1 迭代器的结构设计 210
9.2.2 迭代器的实现 211
9.3 泛型算法 217
9.3.1 只用到迭代器的泛型算法 217
9.3.2 带更多参数的泛型算法 218
9.3.3 只读算法和写算法 220
9.3.4 泛型算法返回值类型的考虑 221
9.3.5 iterator traits 222
9.4 C++标准模板库STL 224
9.4.1 C++的标准容器类 224
9.4.2 C++的标准泛型算法和
可调用对象 224
9.4.3 C++的标准iterator库 225
第10章 多线程 226
10.1 案例分析—顺序执行的局限 226
10.1.1 案例的设计与实现 226
10.1.2 案例问题分析 226
10.2 关键概念 227
10.2.1 异步 227
10.2.2 进程和线程 227
10.2.3 共享和互斥 228
10.2.4 锁和死锁 228
10.3 C++的多线程库 229
10.3.1 头文件 229
10.3.2 头文件 232
10.3.3 头文件 234
10.3.4 头文件 236
10.4 多线程编程示例 239
10.4.1 系统简要分析 239
10.4.2 系统设计 240
10.4.3 系统实现 241
第11章 面向对象设计的原则 244
11.1 单一职责原则 244
11.2 开闭原则 247
11.3 聚集与组合复用原则 248
11.4 里氏替换原则 248
11.5 依赖倒置原则 249
11.6 接口隔离原则 251
11.7 最少知识原则 252
第12章 C++程序设计案例 257
12.1 案例描述 257
12.2 系统分析 258
12.2.1 MVC设计模式
简介 258
12.2.2 系统的用例模型 259
12.3 系统设计 259
12.3.1 系统体系结构设计 259
12.3.2 对象设计 260
12.3.3 用户界面设计 263
12.4 系统实现 263
附录A C++关键字 274
附录B 常用运算符的优先级和
结合性 275
附录C 使用不同的C++编译器 276
C.1 使用GNU GCC for Linux 276
C.2 使用MinGW 277
C.3 使用Visual Studio 2017(VS 2017) 277
C.4 使用Clang 278
参考文献 280
猜您喜欢