C++语言从入门到精通 视频实战版
作者:陈国建,游梁,张建辉等编著
出版时间: 2011年版
内容简介
《C++语言从入门到精通(视频实战版)》是一本全面介绍C++的书籍,由浅入深、循序渐进,可使读者熟练掌握C++,并能开发C++应用程序。《C++语言从入门到精通(视频实战版)》分为五篇,第一篇是C++基础篇,介绍了C++程序设计入门、C++变量与运算符以及C++选择和循环语句等基础知识。第二篇讨论了C++面向过程编程的一些知识点,讨论了数组与字符串、指针与内存、如何自定义数据类型(结构体)和函数的基本知识。第三篇是C++面向对象编程,重点在于类和对象、运算符重载、类的继承和多态与虚函数等。第四篇讨论了C++泛型编程,包括C++模板和标准模板库(STL)。第五篇介绍了C++输入/输出处理和编码规范,讨论了输入/输出、文件操作、命名空间、异常和错误处理的基本知识。《C++语言从入门到精通(视频实战版)》语言简洁,内容精练,重点突出,实例丰富,适合于C++初学者、具有一定C语言或者C++语言基础的中级学习者、学习C++的大中专院校学生阅读,也可作为高等院校C++教材参考书。
目录
丛书序
前言
第一篇 C++基础
第1章 C++程序设计入门 1
1.1 面向对象的程序概述 1
1.1.1 面向过程的程序设计 1
1.1.2 面向对象的程序设计 2
1.2 C++概述 2
1.2.1 C++的发展历程 2
1.2.2 C++的特点 3
1.3 Visual C++开发环境 3
1.3.1 Visual C++ 6.0简介 4
1.3.2 Visual C++开发环境概述 4
1.4 C、C++与Visual C++ 14
1.4.1 C与C++ 14
1.4.2 C++与Visual C++ 14
1.5 第一个C++程序 15
1.5.1 C++程序的结构 15
1.5.2 创建源程序 18
1.5.3 编译、链接和运行程序 18
1.6 小结 19
1.7 习题 19
第2章 变量与运算符 20
2.1 变量与基本数据类型 20
2.1.1 什么是变量 20
2.1.2 如何定义变量 22
2.1.3 整型 23
2.1.4 浮点型 28
2.1.5 字符类型 30
2.1.6 布尔类型 33
2.2 常量 34
2.2.1 什么是常量 34
2.2.2 数值常量—整型常量和实型常量 34
2.2.3 字符型常量 35
2.2.4 字符串常量 35
2.3 算术运算符与算术表达式 36
2.3.1 基本算术运算符 36
2.3.2 关系运算符 37
2.3.3 逻辑运算符 37
2.3.4 位运算符 38
2.3.5 sizeof运算符 39
2.3.6 强制类型转换 39
2.3.7 运算符的优先级与结合性 41
2.3.8 算术表达式 41
2.3.9 逻辑表达式 42
2.3.10 赋值表达式 42
2.3.11 逗号表达式 42
2.4 小结 43
2.5 习题 43
第3章 选择与循环 44
3.1 选择结构和if语句 44
3.1.1 if语句的3种形式 44
3.1.2 if语句的嵌套 49
3.1.3 switch选择语句 52
3.2 循环结构和循环语句 58
3.2.1 while循环结构 58
3.2.2 for循环结构 59
3.2.3 do-while循环结构 62
3.2.4 循环的嵌套 63
3.2.5 几种循环的比较 64
3.2.6 循环语句的效率 65
3.2.7 break、continue和goto语句 66
3.3 小结 74
3.4 习题 75
第二篇 C++过程开发
第4章 数组与字符串 77
4.1 数组的概念 77
4.2 一维数组的定义和引用 78
4.2.1 一维数组的定义 78
4.2.2 一维数组元素的引用 79
4.2.3 一维数组的初始化 80
4.2.4 一维数组与指针 82
4.3 二维数组的定义和引用 83
4.3.1 二维数组的定义 83
4.3.2 二维数组元素的引用 84
4.3.3 二维数组的初始化 85
4.3.4 多维数组的使用 87
4.4 指针与数组 89
4.4.1 指针与数组的关系 89
4.4.2 指向数组元素的指针 89
4.4.3 指针与一维数组 89
4.4.4 指针与多维数组 90
4.4.5 指针与字符数组 90
4.5 指针数组与数组指针 91
4.5.1 指针数组 91
4.5.2 数组指针 91
4.6 动态分配二维数组 92
4.6.1 已知二维数组的第二维进行动态分配 92
4.6.2 已知二维数组的第一维进行动态分配 93
4.6.3 已知二维数组的第一维并一次分配内存 94
4.6.4 二维数组的两维都未知的情况下进行动态分配 95
4.6.5 二维数组的两维都未知的情况下一次分配内存 96
4.7 字符数组与字符串 97
4.7.1 字符数组 97
4.7.2 字符串及其使用 99
4.7.3 字符串处理函数 100
4.8 小结 104
4.9 习题 104
第5章 指针与内存 106
5.1 指针的概念 106
5.2 变量与指针 106
5.2.1 定义指针变量 106
5.2.2 引用指针变量 108
5.2.3 引用指针变量与指针的指针 109
5.2.4 指针作函数参数 110
5.3 数组与指针 112
5.3.1 指向数组元素的指针 112
5.3.2 用指针变量作函数参数接收数组地址 113
5.3.3 多维数组与指针 115
5.4 函数与指针 117
5.4.1 函数指针与指针函数 117
5.4.2 用指向函数的指针作函数参数 120
5.5 动态内存分配 121
5.5.1 使用new动态分配内存 121
5.5.2 使用new申请动态数组 123
5.6 小结 125
5.7 习题 125
第6章 自定义数据类型 127
6.1 结构体类型 127
6.1.1 结构体概述 127
6.1.2 结构体类型变量的定义方法及其初始化 128
6.1.3 结构体变量的引用 132
6.1.4 结构体数组 133
6.1.5 指向结构体变量的指针 135
6.1.6 结构体类型数据作为函数参数 136
6.2 共用体 138
6.2.1 共用体的语法形式 139
6.2.2 定义共用体变量 139
6.2.3 共用体变量的引用 140
6.3 枚举类型 142
6.4 链表 143
6.4.1 链表的结构 143
6.4.2 创建链表 144
6.4.3 链表与数组的区别 144
6.4.4 删除整个链表 145
6.4.5 在链表中插入结点 145
6.5 小结 146
6.6 习题 146
第7章 函数 148
7.1 函数概述 148
7.2 函数定义 150
7.2.1 无参函数 150
7.2.2 有参函数 153
7.2.3 函数头与函数体 158
7.2.4 函数返回值 159
7.2.5 函数声明 160
7.3 函数参数 162
7.3.1 形参和实参 163
7.3.2 值传递 164
7.3.3 引用传递 164
7.3.4 指针传递 165
7.3.5 有缺省参数的函数 166
7.3.6 内联函数 168
7.4 函数的嵌套调用 170
7.4.1 函数的相互嵌套调用 170
7.4.2 函数的递归调用 171
7.5 函数的重载 174
7.5.1 什么是函数重载 174
7.5.2 如何实现函数重载 175
7.6 函数变量 176
7.6.1 局部变量 176
7.6.2 全局变量 177
7.6.3 静态局部变量 180
7.6.4 静态全局变量 182
7.7 小结 183
7.8 习题 183
第8章 C++过程开发的进一步讨论 186
8.1 C/C++重要的关键字 186
8.1.1 const关键字 186
8.1.2 static关键字 188
8.2 内存问题 192
8.2.1 内存泄漏 192
8.2.2 野指针 193
8.2.3 试图修改常量 193
8.2.4 用错sizeof 194
8.3 带参的主函数 195
8.4 小结 196
8.5 习题 196
第三篇 C++面向对象开发
第9章 类和对象 197
9.1 面向对象程序设计概述 197
9.1.1 什么是面向对象的程序设计 197
9.1.2 面向对象程序设计的特点 198
9.1.3 面向对象程序设计的优点 204
9.1.4 类的概念 206
9.2 类的声明与定义 206
9.2.1 类声明和类定义 206
9.2.2 类和结构体 207
9.3 类的成员变量 208
9.3.1 如何定义类的成员变量 208
9.3.2 类成员变量的赋值 209
9.4 类的成员函数 210
9.4.1 成员函数的声明和实现 210
9.4.2 带默认形参值的成员函数 210
9.4.3 内联成员函数 211
9.5 const成员变量与成员函数 212
9.5.1 const成员变量 212
9.5.2 const成员函数 213
9.6 静态成员变量与成员函数 214
9.6.1 静态成员变量 214
9.6.2 静态成员函数 215
9.7 小结 216
9.8 习题 216
第10章 类和对象的进一步讨论 218
10.1 类的构造函数 218
10.1.1 构造函数的概念 218
10.1.2 含有参数的构造函数 220
10.1.3 构造函数的重载 221
10.1.4 构造函数允许按参数默认方式调用 222
10.1.5 用参数初始化表对数据成员初始化 224
10.2 类的析构函数 225
10.2.1 析构函数的概念 225
10.2.2 析构函数的作用 226
10.2.3 构造函数和析构函数的调用顺序 227
10.3 复制构造函数 227
10.3.1 复制构造函数的概念与作用 228
10.3.2 如何定义复制构造函数 229
10.3.3 浅复制与深复制 230
10.3.4 复制构造函数的调用 232
10.4 类作用域和对象生存期 234
10.5 友元 236
10.5.1 友元函数 236
10.5.2 友元成员 238
10.5.3 友元类 240
10.6 对象指针 242
10.6.1 指向对象的指针 242
10.6.2 this指针 244
10.7 对象的动态建立和释放 246
10.7.1 对象的创建 246
10.7.2 对象的释放 247
10.7.3 malloc/free与new/delete的区别 248
10.8 小结 249
10.9 习题 250
第11章 运算符重载 251
11.1 运算符重载概要 251
11.2 运算符重载 252
11.2.1 单目运算符重载 252
11.2.2 双目运算符重载 254
11.2.3 运算符“[ ]”的重载 257
11.2.4 运算符重载为友元函数 258
11.3 小结 260
11.4 习题 260
第12章 类的继承 261
12.1 继承与派生的概念 261
12.2 派生类的声明方式 263
12.3 派生类成员的访问权限 264
12.3.1 公有继承 264
12.3.2 私有继承 265
12.3.3 保护继承 266
12.4 派生类的构造函数和析构函数 267
12.4.1 派生类的构造函数 267
12.4.2 派生类的析构函数 269
12.5 虚基类 270
12.5.1 虚基类的概念 271
12.5.2 共同基类带来的二义性 272
12.6 基类与派生类的相互转换 272
12.7 小结 274
12.8 习题 274
第13章 多态与虚函数 276
13.1 多态与虚函数简介 276
13.1.1 静态联编 276
13.1.2 动态联编 278
13.1.3 虚函数概念 278
13.1.4 虚函数的声明和定义 278
13.1.5 关于虚函数的几点说明 280
13.1.6 虚函数的原理 281
13.2 虚函数的访问 283
13.2.1 对象名访问 283
13.2.2 基指针访问 284
13.2.3 引用访问 286
13.2.4 类内访问 288
13.2.5 在构造函数或析构函数中访问 289
13.3 纯虚函数与抽象类 291
13.3.1 纯虚函数的声明和定义 291
13.3.2 抽象类 293
13.3.3 另一种抽象类:类中只定义了protected型的构造函数 294
13.3.4 虚析构函数 295
13.4 虚函数引入的二义性 297
13.4.1 多基派生的二义性 297
13.4.2 虚继承 399
13.5 重载、覆盖与隐藏 302
13.6 小结 304
13.7 习题 304
第四篇 C++泛型编程
第14章 模板 307
14.1 模板的概念 307
14.2 函数模板 308
14.2.1 函数模板的一般定义 308
14.2.2 显式具体化 309
14.2.3 优先级与执行顺序 312
14.3 类模板 313
14.3.1 类模板的一般定义 313
14.3.2 模板类的继承 316
14.3.3 模板类的静态数据成员 317
14.4 小结 319
14.5 习题 319
第15章 标准模板库(STL) 320
15.1 STL概述 320
15.1.1 算法简介 320
15.1.2 容器简介 320
15.1.3 迭代器简介 321
15.1.4 适配器简介 321
15.2 容器 322
15.2.1 向量 322
15.2.2 列表 323
15.3 迭代器 325
15.3.1 输入和输出迭代器 325
15.3.2 前向迭代器、双向迭代器和随机访问迭代器 326
15.3.3 插入迭代器 327
15.3.4 混合迭代器函数 328
15.3.5 迭代器适配器 328
15.4 算法和函数对象 329
15.4.1 STL通用算法调用形式 329
15.4.2 不可变序列算法 331
15.4.3 可变序列算法 332
15.4.4 函数对象 332
15.5 小结 334
15.6 习题 334
第五篇 输入/输出处理和编程规范
第16章 输入/输出 335
16.1 输入/输出概述 335
16.1.1 流 336
16.1.2 缓冲区 336
16.1.3 3种输入/输出流 336
16.1.4 重定向 336
16.2 C语言I/O库函数 337
16.2.1 标准输出函数printf 337
16.2.2 标准输入函数scanf 340
16.2.3 sprintf和sscanf函数 341
16.2.4 C语言的文件访问机制 345
16.3 流类库 347
16.3.1 流类库更安全、更高效 347
16.3.2 流类库层次 348
16.4 C++输入/输出流 350
16.4.1 标准输出流对象cout 350
16.4.2 其他输出流对象 351
16.4.3 标准输入流对象cin 352
16.4.4 使用格式控制符控制输出格式 354
16.4.5 用流对象的成员函数控制输出格式 356
16.4.6 用流成员函数put输出字符 359
16.4.7 用于字符输入的流成员函数 359
16.4.8 istream类的其他成员函数 362
16.5 重载“<<”和“>>” 365
16.6 C++文件输入/输出流 366
16.6.1 文件的输出 367
16.6.2 文件的输入 368
16.7 小结 370
16.8 习题 370
第17章 文件操作 372
17.1 文件的概述 372
17.2 文件的打开与关闭 372
17.2.1 文件的打开 372
17.2.2 文件的关闭 373
17.3 文件的读写 374
17.3.1 C++文件的读写方法 374
17.3.2 文本文件的读写 375
17.3.3 文件的定位 376
17.3.4 二进制文件的读写 377
17.4 小结 378
17.5 习题 378
第18章 命名空间 379
18.1 什么是命名空间 379
18.1.1 命名空间范例 379
18.1.2 定义命名空间 381
18.2 实体的作用域与可见域 382
18.2.1 局部作用域 382
18.2.2 全局作用域和域操作符 384
18.2.3 作用域嵌套及可见性 385
18.3 使用命名空间 386
18.3.1 作用域解析运算符 386
18.3.2 using指令 386
18.3.3 using指令与using声明的比较 388
18.4 小结 389
18.5 习题 389
第19章 异常和错误处理 390
19.1 编码时的防错 390
19.1.1 使用断言 390
19.1.2 调用exit、abort、_Exit和atexit函数 392
19.1.3 返回错误标志 396
19.2 异常机制 397
19.2.1 异常的抛出 399
19.2.2 异常的捕获 402
19.2.3 异常的处理 404
19.2.4 terminate函数和set_terminate函数 405
19.2.5 unexpected函数与set_unexpected函数 407
19.2.6 标准异常 408
19.3 关于异常处理的进一步讨论 410
19.3.1 异常规范 410
19.3.2 堆栈解退 411
19.3.3 构造函数、析构函数与异常处理 411
19.4 auto_ptr类 412
19.4.1 使用auto_ptr类 412
19.4.2 关于auto_ptr的使用说明 415
19.5 小结 415
19.6 习题 416