图书介绍

标准C++程序设计教程2025|PDF|Epub|mobi|kindle电子书版本百度云盘下载

标准C++程序设计教程
  • 林丽闽,褚尚军等编著 著
  • 出版社: 北京:电子工业出版社
  • ISBN:7505386514
  • 出版时间:2003
  • 标注页数:746页
  • 文件大小:302MB
  • 文件页数:778页
  • 主题词:C语言-程序设计-教材

PDF下载


点此进入-本书在线PDF格式电子书下载【推荐-云解压-方便快捷】直接下载PDF格式图书。移动端-PC端通用
种子下载[BT下载速度快]温馨提示:(请使用BT下载软件FDM进行下载)软件下载地址页直链下载[便捷但速度慢]  [在线试读本书]   [在线获取解压码]

下载说明

标准C++程序设计教程PDF格式电子书版下载

下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。

建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!

(文件页数 要大于 标注页数,上中下等多册电子书除外)

注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具

图书目录

序言1

第1单元 C++函数、控制结构与数据类型3

第1章 了解C++3

1.1 计算机语言4

1.2 C语言和C++语言简史6

1.3 从C语言到C++语言的转换8

1.4 C++的基本概念9

1.5 C++语言及其增强类型11

1.6 C++环境12

1.7 C语言与C++语言的未来13

1.8 C++基本知识点小结13

第2章 编写简单的C++程序15

2.1 主函数main()15

实例2-1 一个最小的C++程序15

2.2 简单的C++程序16

实例2-2 自己编写的第一个C++程序16

2.2.1 #include指令17

2.2.2 空白17

2.2.3 main()函数的声明17

2.2.4 main()函数的作用范围18

2.2.5 源程序中的注释18

2.2.6 控制台输出18

2.2.7 return语句18

2.2.8 程序的结束18

2.3 标识符18

2.4 关键字19

2.5 标准输出流19

2.6 变量20

2.6.1 布尔型21

实例2-3 应用布尔型变量21

2.6.2 字符型21

实例2-4 字符型变量的应用21

2.6.3 wchar_t型22

实例2-5 wchar_t型变量的使用22

2.6.4 整型23

实例2-6 引用int数据类型24

2.6.5 浮点类型24

实例2-7 声明和引用浮点型变量25

2.7 常量25

2.7.1 字符型常量25

2.7.2 转义字符26

2.7.3 整型常量26

2.7.4 浮点型常量27

2.7.5 地址常量27

2.7.6 字符串常量27

实例2-8 字符串常量的合并28

2.8 表达式28

2.9 赋值语句29

实例2-9 应用赋值语句和表达式29

2.10 用逗号分隔开的声明语句30

2.11 表达式中的运算符31

2.11.1 算术运算符31

实例2-10 表达式赋值31

2.11.2 逻辑运算符32

2.11.3 位逻辑运算符33

2.11.4 位移运算符34

2.11.5 关系运算符34

2.11.6 自增和自减运算符36

实例2-11 自增和自减运算符的位置36

2.11.7 赋值运算符37

实例2-12 赋值运算符38

2.11.8 复合赋值运算符39

实例2-13 复合赋值运算符应用39

2.11.9 条件运算符40

实例2-14 计算罚款数目40

2.11.10 逗号运算符41

实例2-15 逗号运算符应用41

2.12 优先级和计算顺序42

2.12.1 结合律43

2.12.2 优先级43

2.13 表达式不参加运算的情况44

2.14 初始化44

实例2-16 不同变量的初始化44

2.15 类型转换45

实例2-17 几种类型转换46

2.16 控制台输入与输出47

2.16.1 标准输出流47

实例2-18 利用std::cout优化代码47

2.16.2 格式化输出48

实例2-19 用三种进制形式显示整数48

2.16.3 标准错误流49

2.16.4 标准输入流49

实例2-20 使用cin从键盘读入一个整数49

实例2-21 使用std::cin设备从键盘把字符串读入到字符串数组中50

第3章 C++函数51

3.1 函数简介51

3.2 函数原型52

3.2.1 无标识符的参数类型52

3.2.2 函数原型实例53

3.2.3 void型函数53

3.2.4 无参数的函数53

3.2.5 参数个数可变的函数53

3.2.6 既没有返回值也不带参数的函数54

3.2.7 标准库函数的原型54

3.2.8 不需要原型的函数54

3.3 函数的定义与调用54

实例3-1 定义一个函数54

3.4 函数的返回55

实例3-2 return语句可在函数体内的任何位置56

3.5 函数的返回值57

实例3-3 计算宽度57

3.6 参数的传递和使用58

实例3-4 计算宽度——改进版本58

3.6.1 标识符的作用域59

3.6.2 通过函数调用来初始化60

3.6.3 初始化执行的顺序60

3.6.4 传递多个参数60

实例3-5 计算砖块的体积60

3.6.5 用做实参的函数调用61

3.6.6 值传递61

3.6.7 实参和返回值的类型转换61

3.7 无名的函数形参62

3.8 函数的默认参数62

实例3-6 默认参数的用法62

3.9 内联函数63

实例3-7 指定为内联函数63

3.10 递归64

3.11 函数重载64

3.11.1 为完成不同的操作而重载64

实例3-8 复制字符串65

3.11.2 为不同的格式而重载66

实例3-9 显示时间66

3.12 安全连接67

3.13 连接说明67

实例3-10 使用C的连接约定68

第4章 C++控制结构71

4.1 语句块71

4.1.1 嵌套深度71

4.1.2 缩进风格71

4.2 条件语句72

4.2.1 if语句72

实例4-1 检验条件是否为零72

实例4-2 检验变量是否为零73

实例4-3 条件为真时执行74

4.2.2 if…else语句75

实例4-4 有条件地执行程序块75

4.2.3 else...if语句75

实例4-5 屏幕菜单程序75

4.2.4 switch...case语句77

实例4-6 检验整型变量的取值77

4.2.5 在if语句的条件表达式里声明变量78

4.3 循环语句79

4.3.1 while语句79

实例4-7 菜单选择与退出79

4.3.2 do...while语句81

实例4-8 猜谜游戏81

4.3.3 for语句82

实例4-9 限次循环显示82

实例4-10 遍历数组中的每一个元素83

4.3.4 在for语句的条件表达式内声明变量84

4.4 循环控制84

4.4.1 break语句84

实例4-11 终止并跳出循环84

4.4.2 continue语句85

实例4-12 中断但不跳出循环85

4.5 跳转86

实例4-13 跳转到任意可执行语句86

4.5.1 goto语句的错误用法87

4.5.2 C++的goto和C的goto88

4.5.3 goto语句错误的改正88

实例4-14 优化的跳转程序之一88

实例4-15 优化的跳转程序之二88

4.5.4 是否可以使用goto语句89

第5章 C++数据类型91

5.1 作用域91

5.1.1 全局作用域91

实例5-1 具有全局作用域的外部变量91

5.1.2 局部作用域92

实例5-2 具有局部作用域的变量93

实例5-3 作用域的屏蔽93

5.1.3 全局作用域解析符94

实例5-4 使用全局作用域解析符94

5.1.4 文件作用域95

实例5-5 static存储类型修饰符95

5.1.5 作用域和生存周期96

实例5-6 变量的生存周期96

5.2 存储类型97

5.2.1 自动存储类型98

5.2.2 静态存储类型98

实例5-7 静态局部变量98

5.2.3 外部存储类型99

实例5-8 使用外部变量99

5.2.4 寄存器存储类型100

实例5-9 使用寄存器变量100

5.3 初始化的默认值101

5.4 类型修饰符101

5.4.1 const类型修饰符101

实例5-10 使用const型变量作为循环的上限102

5.4.2 volatile类型修饰符102

实例5-11 声明volatile型变量102

5.5 用户定义的数据类型103

5.5.1 结构的声明103

5.5.2 结构变量的定义103

5.5.3 对结构成员的引用104

实例5-12 结构的声明与使用104

5.5.4 结构的初始化105

实例5-13 初始化结构变量105

5.5.5 结构的嵌套105

实例5-14 声明两个结构105

5.5.6 函数传递结构和从函数返回结构106

实例5-15 传递和返回结构107

5.6 联合数据类型108

实例5-16 使用联合108

5.6.1 联合的初始化109

实例5-17 初始化一个包含结构的联合109

5.6.2 匿名联合110

实例5-18 使用匿名联合110

5.6.3 枚举常量111

实例5-19 在switch语句中使用枚举类型111

5.7 数组112

5.7.1 数组的声明112

5.7.2 利用下标访问数组元素113

5.7.3 数组的初始化113

实例5-20 一个简单的7元素整型数组113

5.7.4 结构数组114

实例5-21 一个简单的结构数组114

5.7.5 多维数组115

实例5-22 二维数组——税收数据表115

5.7.6 字符型数组116

实例5-23 初始化字符型数组117

第6章 指针、地址与引用119

6.1 指针和地址119

6.1.1 指向内部数据类型的指针120

实例6-1 指向C++内部数据类型的指针120

6.1.2 指针的算术运算121

实例6-2 指针运算121

实例6-3 利用指针变量对数组进行遍历123

6.1.3 指针和数组123

实例6-4 一种新的数组地址表示法124

实例6-5 指针和数组的几种常见用法125

6.1.4 结构指针126

实例6-6 利用结构指针遍历结构数组126

6.1.5 用做函数参数的指针127

实例6-7 指针作为参数使用128

实例6-8 指向多维数组的指针参数128

6.1.6 以地址作为函数的返回值130

实例6-9 返回地址的函数130

实例6-10 利用指针遍历数组131

6.1.7 函数指针132

实例6-11 函数指针的用法132

实例6-12 菜单管理器133

6.1.8 指针的指针135

实例6-13 检索指针的指向135

6.1.9 指向指针数组的指针136

实例6-14 字符串表136

6.1.10 指向const型变量的指针137

实例6-15 标准C的std::strcpy()函数实现138

6.1.11 const型指针变量139

实例6-16 使用const型指针139

6.1.12 void型指针140

实例6-17 标准C在<cstdlib>头文件中声明的内存管理函数140

6.2 sizeof运算符142

实例6-18 动态地计算数组元素的个数143

6.3 C风格的强制类型转换与typedef143

实例6-19 改变记录计数器的数值类型144

6.4 命令行参数145

实例6-20 命令行参数的用法146

6.5 程序的内存结构146

6.5.1 堆147

6.5.2 new和delete运算符147

实例6-21 new和delete运算符的用法147

6.5.3 为固定大小的数组分配内存148

实例6-22 用new和delete为数组分配和释放内存148

6.5.4 为动态数组分配内存149

实例6-23 用new运算符为可变大小的数组分配内存149

6.5.5 堆耗尽时的处理150

6.5.6 栈150

6.6 递归151

6.6.1 一个简单递归的例子151

实例6-24 逆序显示姓名151

6.6.2 一个使用了递归的计算器程序152

实例6-25 一个计算数字表达式的计算器程序152

6.7 引用型变量156

6.7.1 引用是一个别名156

实例6-26 引用型变量的用法157

实例6-27 比较实际变量地址和引用地址157

6.7.2 引用的初始化158

6.7.3 利用引用来简化复杂的表示法158

实例6-28 利用引用来简化复杂的表示法158

6.7.4 作为函数形参的引用160

实例6-29 以引用代替复制160

6.7.5 以引用方式调用161

实例6-30 把引用作为参数传递161

6.7.6 eonst型引用形参163

6.7.7 以引用作为返回值163

实例6-31 引用函数返回值163

6.7.8 以const型引用作为返回值164

6.7.9 返回指向自变量的引用164

6.7.10 指针和引用165

第1单元练习167

第2单元 C++库函数与函数模板179

第7章 C++库函数和宏179

7.1 <cassert>180

实例7-1 assert宏的用法180

7.2 <cctype>181

7.3 <cerrno>182

实例7-2 errno变量的用法182

7.4 <cmath>183

7.5 <csetjmp>184

实例7-3 setjmp()和longjmp()函数的用法184

7.6 <cstdarg>186

实例7-4 处理参数个数可变的函数186

7.7 <cstdio>187

7.8 <cstdlib>187

7.8.1 数字函数187

7.8.2 内存管理函数188

7.8.3 系统函数188

7.8.4 随机数发生器函数189

实例7-5 改进的猜谜游戏189

7.9 <cstring>190

实例7-6 比较和复制字符串190

7.10 <ctime>192

实例7-7 显示当前的格林威治标准时间193

第8章 C+4程序的预处理195

8.1 预处理指令195

8.2 文件的包含与#include指令196

8.3 宏197

8.3.1 #define指令197

8.3.2 带参数的#define指令198

实例8-1 计算工资199

实例8-2 改进后的计算工资程序201

8.3.3 格式和对齐203

8.3.4 #运算符203

实例8-3 字符串化运算符的用法204

8.3.5 ##运算符204

实例8-4 符号连接运算符的用法204

实例8-5 符号连接运算符的高级用法205

8.3.6 #undef指令205

8.4 条件编译指令206

8.4.1 #if指令206

8.4.2 #endif指令206

实例8-6 #if和#endif的用法206

8.4.3 #ifdefined指令206

实例8-7 检测宏是否被定义207

8.4.4 #ifdef和#ifndef指令207

8.4.5 #else指令207

实例8-8 #else预处理指令的用法207

8.4.6 #elif指令208

实例8-9 #elif预处理指令的用法208

8.4.7 #error指令208

实例8-10 检测宏表示的值209

8.5 其他标准指令209

8.5.1 #line指令210

8.5.2 #pragma指令210

第9章 C++结构与类211

9.1 C++的类211

9.2 数据类型的属性211

9.2.1 数据描述212

9.2.2 实现212

9.2.3 性质212

9.2.4 接口212

9.3 用户定义数据类型212

9.3.1 抽象212

9.3.2 对象是什么212

9.3.3 数据抽象和面向过程编程213

实例9-1 显示日期213

9.3.4 数据抽象和封装214

9.4 带有函数的结构体215

9.4.1 向结构体添加函数215

实例9-2 显示一个人的生日215

9.4.2 同一结构的多个实例216

实例9-3 显示几个人的生日216

9.4.3 具有相同函数名的不同结构217

实例9-4 显示日期和时间217

9.5 访问控制符219

9.6 面向过程的编程方法220

9.7 类与结构的比较220

9.8 联合体220

第10章 C++函数模板221

10.1 函数模板基础221

实例10-1 一个简单的函数模板222

实例10-2 显示最小数223

10.2 函数的定制223

实例10-3 比较两个字符串224

实例10-4 定制函数模板225

10.3 使用模板排序226

实例10-5 定义函数模板226

实例10-6 对整数进行排序227

第2单练习229

第3单元 C++类与类模板233

第11章 C++类233

11.1 类的设计233

11.1.1 类的声明233

实例11-1 计算立方体的体积234

11.1.2 类的成员235

11.1.3 类成员的可见性235

11.1.4 数据成员236

11.1.5 初始化236

11.1.6 成员函数236

11.1.7 面向对象的类的设计方法237

11.1.8 类对象的作用域237

11.1.9 内联函数237

实例11-2 使用内联函数计算立方体的体积237

11.2 构造函数239

11.2.1 使用默认参数的构造函数239

实例11-3 用默认值来初始化240

11.2.2 默认构造函数240

11.2.3 重载构造函数241

实例11-4 具有两个构造函数的类241

11.3 析构函数242

11.4 类的转换243

11.4.1 转换函数243

11.4.2 转换构造函数243

实例11-5 从std::time_t对象到Date类对象的转换243

11.4.3 成员转换函数245

实例11-6 计算从20世纪开始至今的天数245

11.4.4 类的转换246

实例11-7 对两种日期进行转换246

11.4.5 转换函数的调用248

实例11-8 三种类转换形式248

11.4.6 其他转换方法250

实例11-9 多种转换方法250

11.4.7 显式构造函数252

11.4.8 表达式内部的转换252

实例11-10 对两种日期进行转换253

11.5 私有数据成员的使用254

11.5.1 取值和赋值成员函数254

实例11-11 通过成员函数来使用数据成员254

11.5.2 常量成员函数255

11.5.3 改进的成员转换函数255

实例11-12 隐藏数据时的转换255

11.6 友元257

11.6.1 友元类257

实例11-13 友元类的用法257

11.6.2 隐式构造函数258

11.6.3 前向引用259

11.6.4 显式友元前向引用259

实例11-14 不使用前向引用259

11.6.5 友元函数261

实例11-15 类的友元函数261

11.6.6 匿名对象262

11.6.7 非类成员的友元函数262

实例11-16 用友元函数将两个类联系起来262

11.7 析构函数的使用264

实例11-17 使用析构函数显示月份264

11.8 重载赋值运算符266

实例11-18 类的赋值266

11.9 this指针268

11.9.1 以this指针作为返回值269

实例11-19 this指针270

11.9.2 在链表中使用this指针272

实例11-20 this指针和链表272

11.10 类对象数组274

实例11-21 类的数组274

11.10.1 类对象数组和默认构造函数275

实例11-22 类数组的构造函数276

11.10.2 类对象数组和析构函数277

实例11-23 类数组的析构函数277

11.11 静态成员278

11.11.1 静态数据成员278

实例11-24 静态成员和链表278

11.11.2 静态成员函数280

实例11-25 显示姓名280

11.11.3 公有静态成员282

11.12 类和堆282

11.12.1 构造函数和析构函数283

实例11-26 new和delete运算符283

11.12.2 堆和类数组284

实例11-27 错误地释放类数组所占内存284

实例11-28 正确地删除对象数组指针285

11.12.3 重载new和delete运算符286

实例11-29 针对某个类的new和delete运算符286

11.12.4 检测异常288

11.12.5 重载new和delete中的异常处理288

11.12.6 重载new[]和delete[]289

实例11-30 针对类的new[]和delete[]运算符289

11.13 副本构造函数291

实例11-31 调用副本构造函数的两种方法291

11.14 类的引用293

实例11-32 使用了引用的类294

11.15 构造函数的参数初始化表296

11.16 对eonst修饰符的简单说明296

11.17 可变的数据成员299

实例11-33 使用可变数据成员299

11.18 类的源文件和目标文件的管理300

11.18.1 头文件中的类声明300

11.18.2 库中的类成员函数300

第12章 运算符重载301

12.1 运算符重载的时机301

12.2 运算符重载的一个例子302

12.3 运算符重载的规则302

12.4 双目算术运算符303

12.5 作为类成员的运算符函数304

实例12-1 重载+运算符304

12.6 非类成员的运算符函数306

实例12-2 用非类成员来重载+运算符306

12.7 关系运算符308

实例12-3 重载关系运算符308

12.8 其他的赋值运算符310

实例12-4 重载+=运算符310

12.9 自增和自减运算符311

实例12-5 重载++运算符311

12.10 单目正、负运算符313

实例12-6 重载单目负运算符313

12.11 下标运算符314

实例12-7 重载下标运算符[]314

12.12 成员指针运算符316

实例12-8 重载->运算符317

第13章 类的继承319

13.1 继承319

13.2 为什么要使用继承321

13.3 数据抽象类的设计322

13.3.1 基类322

实例13-1 声明类Date322

13.3.2 效率设计325

实例13-2 实现类Date325

13.3.3 单继承327

13.3.4 派生类327

实例13-3 声明派生类328

13.3.5 受保护的成员328

13.3.6 派生类的成员和定制的成员328

13.3.7 公有和私有的基类329

13.3.8 基类和派生类的构造函数329

13.3.9 定制新的成员函数329

13.3.10 重定义基类的成员函数330

实例13-4 实现类的静态数据成员和非内联成员函数330

13.3.11 编写程序330

实例13-5 通过继承定制抽象数据类型331

13.3.12 用于基类和派生类的作用域运算符331

实例13-6 类的作用域运算符332

13.3.13 多个派生类332

13.3.14 第二个派生类333

实例13-7 CustomDate.h333

实例13-8 CustomDate.cpp333

13.3.15 使用基类和派生类334

实例13-9 多个派生类334

13.3.16 派生类之间的关系335

13.3.17 从派生类派生出的类335

实例13-10 SpeeialCustomDate.h337

实例13-11 从派生类中派生类338

13.4 类层次结构的设计339

13.4.1 C++与纯面向对象的设计339

13.4.2 数据抽象340

13.4.3 重载运算符<<和>>341

实例13-12 重载运算符<<和>>342

实例13-13 使用重载运算符<<和>>343

13.4.4 两个更为抽象的数据343

实例13-14 Ssn.h343

实例13-15 Ssn.cpp344

实例13-16 Money.h345

实例13-17 Money.cpp345

13.4.5 包含头文件346

13.4.6 C++标准字符串类346

13.5 基类Person346

实例13-18 Person.h346

实例13-19 Person.cpp348

13.5.1 类中的枚举数据类型349

13.5.2 虚函数349

13.5.3 纯虚函数349

13.5.4 两种显示方式349

13.6 派生类350

13.6.1 类Employee350

实例13-20 Employee.h350

实例13-21 Employee.cpp350

13.6.2 函数重载351

13.6.3 类WagedEmployee351

实例13-22 WagedEmployee.h351

实例13-23 WagedEmployee.cpp352

13.6.4 类SalariedEmployee353

实例13-24 SalariedEmployee.h353

实例13-25 SalariedEmployee.cpp353

13.6.5 类Contractor354

实例13-26 Contractor.h354

实例13-27 Contractor.cpp355

13.6.6 构造目标代码库355

13.6.7 使用问题域类层次结构356

实例13-28 人事管理应用程序356

13.6.8 用引用方式调用虚函数359

13.6.9 用引用方式调用非虚函数360

13.6.10 对重定义的虚函数的调用360

13.6.11 派生类没有重定义的虚函数360

13.6.12 虚析构函数360

实例13-29 基类非虚析构函数361

实例13-30 基类的虚析构函数361

13.6.13 应该定义为虚函数的成员函数362

13.7 多态性363

第14章 类的多重继承365

14.1 多个基类365

14.1.1 多重继承中的构造函数的执行366

14.1.2 多重继承中的析构函数的执行367

14.2 细化资产系统的设计367

14.3 重定义多重继承中的成员368

14.4 多重继承中的二义性369

14.4.1 二义性成员函数369

14.4.2 二义性数据成员369

14.4.3 在设计时解决二义性问题370

14.4.4 不可避免的二义性问题371

14.5 虚基类371

14.6 设计的实现372

14.6.1 类DisplayObject372

实例14-1 实现基类DisplayObject372

14.6.2 类Vehicle373

实例14-2 实现类Vehicle373

14.6.3 类Property373

实例14-3 实现类Property373

14.6.4 类Asset和Expense374

实例14-4 实现类Asset374

实例14-5 实现类Expense375

14.6.5 类Computer和Pencile376

14.6.6 类CompanyCar和LeaseCar376

实例14-6 实现类CompanyCar和LeaseCar376

14.6.7 应用程序376

实例14-7 多重继承376

14.7 回顾377

第15章 类模板379

15.1 类模板的基本知识379

15.2 声明模板类的多个对象380

15.3 调用类模板的成员函数380

15.4 声明多个参数381

实例15-1 简单的类模板381

实例15-2 为具体类型的参数提供默认值382

15.5 有界数组类模板383

实例15-3 类模板头文件383

实例15-4 使用有界数组模板384

15.6 何时使用类模板385

15.7 链表模板386

实例15-5 使用链表模板386

15.7.1 整数值对象链表390

实例15-6 使用整型值对象的链表类390

15.7.2 日期对象链表391

实例15-7 使用日期链表模板391

15.8 定制模板393

15.8.1 定制类模板393

实例15-8 定制类模板393

15.8.2 定制模板成员函数394

实例15-9 定制显示成员函数394

15.8.3 模板的部分定制395

实例15-10 部分定制模板395

15.9 类模板的默认参数397

实例15-11 默认模板参数397

第16章 面向对象的程序设计399

16.1 基本知识399

16.2 过程化程序设计400

16.3 面向对象的程序设计400

16.3.1 面向对象的程序400

16.3.2 对象401

16.3.3 抽象402

16.3.4 封装403

16.3.5 方法和消息404

16.3.6 功能性方法404

16.3.7 数据类型方法404

16.3.8 隐式类型转换方法405

16.3.9 成员函数406

16.3.10 继承406

16.3.11 单个继承406

16.3.12 多重继承406

16.3.13 类的关系407

16.3.14 多态性407

16.4 小结407

第3单元练习409

第4单元 C++标准库413

第17章 标准库简介413

17.1 类std::string413

17.1.1 构造字符串413

17.1.2 给字符串赋值414

17.1.3 字符串连接414

17.1.4 字符串的下标414

17.1.5 字符串的比较414

17.1.6 子串415

17.1.7 搜索字符串415

17.1.8 字符串操作415

17.2 输入/输出流416

17.2.1 流类416

17.2.2 缓冲输出417

17.2.3 格式化输出417

实例17-1 使用成员函数put()421

实例17-2 ostream的成员函数write()421

实例17-3 istream的成员函数get()422

实例17-4 为函数get()指定缓冲区地址和长度423

实例17-5 istream的成员函数getline()424

实例17-6 istream的成员函数read()425

17.2.4 文件的输入/输出425

17.3 类std::complex427

实例17-7 类complex428

17.4 标准模板类428

17.5 标准异常428

实例17-8 从C++标准库的exception类派生出异常类430

第18章 格式化输出与字符串处理431

18.1 格式化输出431

实例18-1 显示浮点值431

18.2 操纵算子、标志和成员函数432

18.2.1 函数ios::width432

实例18-2 利用成员函数width()控制输出宽度432

18.2.2 操纵算子std::setw433

实例18-3 以表格形式显示数据433

18.2.3 函数std::ios::fill434

实例18-4 用星号填充一列数434

18.2.4 输出对齐434

实例18-5 操纵算子setiosflags和resetiosflags434

18.2.5 操纵算子setprecision435

实例18-6 操纵算子setprecision435

18.2.6 科学记数法和定点记数法436

实例18-7 设置ios::fixed标志436

18.2.7 函数std::ios::setf和std::ios::unsetf437

18.2.8 格式化标志437

18.2.9 格式化操纵算子437

18.2.10 格式化函数437

实例18-8 类std::istringstream438

实例18-9 类std::ostringstream438

实例18-10 类std::stringstream439

第19章 C++输入/输出流441

19.1 文件流类的层次结构441

19.2 类std::ofstream441

实例19-1 文件输出441

实例19-2 向输出文件追加内容442

实例19-3 避免打开现有的文件443

实例19-4 把类对象的二进制表示记录到数据文件中444

实例19-5 使用ofstream的成员函数445

19.3 类ifstream446

实例19-6 从文件中读取类Date的对象447

19.3.1 读取文件直至文件结束447

实例19-7 测试是否文件结束447

19.3.2 在文件中定位448

实例19-8 成员函数seekg()448

实例19-9 确定输入的当前位置449

19.3.3 读取和写入流文件449

实例19-10 读写流文件450

19.3.4 文件和流的关联与解除关联450

实例19-11 成员函数open()和close()450

19.4 二进制文件与文本文件451

19.5 类std::fstrean452

实例19-12 输入输出流452

第4单元练习453

第5单元 C++STL459

第20章 STL概述459

20.1 为什么需要STL459

20.2 STL编程模型460

20.2.1 序列460

20.2.2 容器适配器460

20.2.3 结合容器461

20.2.4 指示器461

20.2.5 算法462

20.2.6 函数对象参数462

20.2.7 内存分配器462

第21章 序列在程序中的使用463

21.1 序列容器简介463

21.2 向量类模板464

实例21-1 创建简单的向量464

21.2.1 插入和访问向量元素465

实例21-2 给向量添加元素465

实例21-3 在向量中的任意位置插入元素466

21.2.2 删除向量元素467

实例21-4 从向量中删除元素467

实例21-5 在向量中的任意位置删除元素468

21.2.3 向量的比较469

实例21-6 向量比较469

21.2.4 向量的成员函数470

21.3 双端队列类模板471

实例21-7 创建一个简单的双端队列471

21.3.1 插入和访问双端队列的元素472

实例21-8 给双端队列添加元素472

实例21-9 在双端队列的任意位置插入元素473

21.3.2 删除双端队列的元素474

实例21-10 删除字符序列中的字符474

实例21-11 删除双端队列中任意位置处的元素475

21.3.3 比较双端队列476

实例21-12 比较双端队列476

21.3.4 双端队列的成员函数477

21.4 链表模板类478

实例21-13 创建一个简单的链表478

21.4.1 插入链表元素479

实例21-14 给链表添加元素479

实例21-15 在链表的任意位置插入元素480

21.4.2 删除链表元素481

实例21-16 从链表中删除元素481

实例21-17 删除链表中任意位置处的元素482

21.4.3 比较链表483

实例21-18 比较链表483

21.4.4 链表成员函数484

21.5 容器适配器std::stack485

实例21-19 管理堆栈485

21.6 容器适配器std::queue487

实例21-20 管理队列487

21.7 容器适配器std::priority_queue488

实例21-21 管理优先级队列489

第22章 结合容器491

22.1 介绍结合容器491

22.2 类模板std::set491

实例22-1 创建一个简单集合492

22.2.1 插入集合元素493

实例22-2 向集合中添加元素493

22.2.2 删除集合中的元素494

实例22-3 从一个集合中的任意位置删除元素494

22.2.3 对集合进行搜索495

实例22-4 在集合中查找一个元素495

22.2.4 在集合之间进行比较496

实例22-5 比较集合496

22.2.5 集合的成员函数497

22.3 类模板std::multiset498

实例22-6 创建一个简单的多重集合499

22.3.1 插入std::multiset元素500

实例22-7 对一个多重集合添加元素500

22.3.2 删除多重集合的元素501

实例22-8 在一个多重集合的任意位置删除元素501

22.3.3 对std::multiset进行搜索502

实例22-9 搜索一个多重集合502

22.3.4 在std::multiset集合之间进行比较503

实例22-10 比较多重集合503

22.3.5 多重集合的成员函数505

22.4 类模板std::map506

实例22-11 创建一个简单映射506

22.4.1 插入map元素507

实例22-12 为映射添加元素507

实例22-13 使用[]操作符在std::map对象中插入元素508

22.4.2 删除映射中的元素509

实例22-14 删除映射中任意位置上的元素509

22.4.3 对映射进行搜索510

实例22-15 搜索一个映射510

22.4.4 在映射之间进行比较512

实例22-16 比较映射512

22.4.5 映射成员函数513

22.5 类模板std::multimap514

实例22-17 创建并显示一个简单的多重映射514

22.5.1 插入multimap元素515

22.5.2 删除多重映射的元素516

实例22-18 在多重映射的任意位置删除元素516

22.5.3 搜索多重映射517

实例22-19 搜索一个多重映射517

22.5.4 对多重映射进行比较518

实例22-20 比较多重映射519

22.5.5 多重映射的成员函数520

22.6 类模板std::bitset521

22.6.1 在位集合中对位进行操作521

实例22-21 std::bitset类成员函数的用法522

22.6.2 在位集合中测试位523

实例22-22 测试位523

22.6.3 比较位集合524

实例22-23 比较两个位集合524

22.6.4 位集合的成员函数526

22.7 用户定义的谓词526

实例22-24 谓词526

22.8 小结529

第23章 通用算法531

23.1 介绍通用算法531

23.2 非修正序列算法532

实例23-1 查找对象中相匹配的元素532

实例23-2 确定集合中某值出现的次数534

实例23-3 显示多重集合的内容535

23.3 修正序列算法536

实例23-4 用0来填充向量537

实例23-5 打乱向量中的内容538

实例23-6 把所有的数字5都放到向量的开端539

实例23-7 重新组织向量中的字符541

23.4 排序算法542

实例23-8 向量排序544

实例23-9 向量排序并将结果前置546

实例23-10 std::nth_element()函数的用法547

实例23-11 合并向量549

实例23-12 查找向量中的相同部分551

23.5 数值算法552

实例23-13 计算某数值与每个元素之和553

实例23-14 计算规定范围中元素的内积之和554

实例23-15 计算规定范围中元素的部分和555

实例23-16 计算规定范围中元素的相邻差557

第24章 指示器559

24.1 指示器简介559

24.2 输入指示器560

实例24-1 输入指示器的用法560

24.3 输出指示器561

实例24-2 输出指示器的用法561

24.4 前向指示器562

实例24-3 前向指示器的用法562

24.5 双向指示器564

实例24-4 双向指示器的用法564

24.6 随机访问指示器566

实例24-5 随机访问指示器的用法566

24.7 特殊用途指示器568

24.7.1 流指示器568

实例24-6 输入流指示器的用法568

实例24-7 输出流指示器的用法570

24.7.2 指示器适配器572

实例24-8 反向指示器的用法572

实例24-9 用指示器来覆盖数值574

实例24-10 用指示器插入数值575

第25章 C++异常处理577

25.1 C中的异常处理577

25.2 C++中的异常处理579

25.2.1 try块579

25.2.2 catch异常处理器580

25.2.3 throw语句580

25.2.4 try/throw/catch系列581

实例25-1 抛出并捕获异常581

实例25-2 多个catch处理模块583

25.2.5 异常情况指定584

25.2.6 不可预见的异常584

25.2.7 catch-all异常处理模块584

实例25-3 catch-all模块行为585

25.2.8 从处理模块中抛出异常586

实例25-4 重新抛出异常586

25.2.9 没有被捕获的异常588

实例25-5 未经捕获的异常588

实例25-6 捕获未经捕获的异常589

25.3 在抛出的异常中进行选择590

25.4 异常情况以及没有被释放的资源591

25.5 一个改进的计算器程序592

实例25-7 计算器592

第5单元练习597

第6单元 深入学习C++601

第26章 标准C++语言补充601

26.1 名字空间601

26.1.1 名字空间的介绍602

26.1.2 有关名字空间的成员602

实例26-1 std602

26.1.3 using namespace语句603

实例26-2 使用名字空间中定义的标识符603

实例26-3 using namespace语句的问题603

实例26-4 避开使用using namespace语句604

26.1.4 定义名字空间605

实例26-5 定义了各种类型变量和函数的名字空间605

26.1.5 嵌套名字空间606

实例26-6 嵌套606

26.1.6 无名名字空间607

26.1.7 名字空间的别名607

实例26-7 别名608

26.2 新风格类型转换609

26.2.1 动态类型转换609

实例26-8 向下转换指针609

实例26-9 用动态类型转换向下转换引用611

26.2.2 静态类型转换613

实例26-10 静态类型转换与C风格类型转换613

26.2.3 重新解释类型转换614

实例26-11 用空指针返回100个字符缓冲区的内存分配615

26.2.4 常类型转换615

实例26-12 计数器616

26.3 运行时类型信息617

实例26-13 检测typeid行为617

第27章 区域表示619

27.1 国际化元素619

27.2 std::locale类620

27.2.1 标准侧面620

27.2.2 默认区域表示与全局区域表示620

27.3 生成区域表示对象621

实例27-1 不同区域的日期显示622

27.4 生成混合区域表示623

实例27-2 日期混合显示624

27.5 流与区域表示625

实例27-3 imbue()函数625

27.6 操作侧面626

实例27-4 访问侧面626

第6单元练习628

第7单元 附录631

附录A 数值系统631

A.1 简介631

A.2 将二进制数简化为八进制和十六进制数633

A.3 将八进制和十六进制数转换为二进制数634

A.4 将二进制、八进制和十六进制数转换为十进制数634

A.5 将十进制数转换为二进制、八进制或十六进制数635

A.6 负二进制数:补码表示法636

A.7 知识点小结637

附录B 运算符的优先级与结合律639

附录C ASCII字符集640

附录D C与C++的区别641

D.1 返回值641

D.2 类型检查641

D.3 声明641

D.4 名字642

D.5 C++的一些优点642

附录E 标准C++特性总结643

E.1 新式头文件643

E.2 ANSI类型转换运算符644

E.3 模板与异常处理644

E.4 其他关键字645

E.5 if语句中变量的作用范围645

E.6 具有枚举类型的函数的重载646

E.7 嵌入类的前向引用646

附录F 标准异常648

附录G C++术语与概念649

第7单元练习685

习题集687

练习答案729

热门推荐