《C++探秘:68讲贯通C++》高清版PDF电子书免费网盘下载

2021-02-03 14:47:41 小八 0点热度 1人阅读

简介:本书采用引导探索式的教学方法,将庞大的C++ 知识体系划分成四个大部分68 讲,每讲都包含一个互动练习,帮助读者循序渐进地学习C++。你可以通过这种互动快速掌握表达式、声明、标准库、自定义函数、类和模板等等C++ 的各方面特性,并最终掌握如何把这些特

 

本书采用引导探索式的教学方法,将庞大的c++ 知识体系划分成四个大部分68 讲,每讲都包含一个互动练习,帮助读者循序渐进地学习c++。你可以通过这种互动快速掌握表达式、声明、标准库、自定义函数、类和模板等等c++ 的各方面特性,并最终掌握如何把这些特性组合起来编写复杂的c++ 程序。

本书采用引导探索式的教学方法,将庞大的c++ 知识体系划分成四个大部分68 讲,每讲都包含一个互动练习,帮助读者循序渐进地学习c++。你可以通过这种互动快速掌握表达式、声明、标准库、自定义函数、类和模板等等c++ 的各方面特性,并最终掌握如何把这些特性组合起来编写复杂的c++ 程序。

本书的每一讲都既有文字又有交互式练习。这些练习和你在其他书上看到的不一样。我的作业中没有多选、填空或者简答题,都是对C++关键特性的交互式探索。在本书的前一部分,我会给出一个完整的程序。随着学习的深入,你将可以修改和扩展该程序。很快,你就能自己编写整个程序了。

“交互”的意思是,我提出问题,你回答问题,我尽量在行文中点评你的回答。听起来很疯狂吧?但是通过回答问题,你能更好地学习C++。为此,我在书中留出填写答案的空白,你可以把答案写在书上(除非你使用的是从朋友或者从图书馆借来的书)。实际上,我鼓励你把所有的答案都写在书上。只有通过回答问题,你才能真正地学好这门课。

有的问题没有唯一正确的答案。我提出问题是为了让你思考,让你从一个新的角度去看待一个熟悉的问题。大部分问题都有清晰正确的答案,而我会在后继的叙述中给出答案,因此不要向后跳读。你要先写下答案,然后再去验证。有些问题可能很棘手或者需要我还没有讲到的知识,这种情况下,我估计你的答案可能会是错的,但是错了也没有关系。不要担心,我不会给你打分。(如果本书被用作正式的教材,老师应该只依据是否完成这些练习来打分,而不用管答案是否正确。老师应该另有其他的练习、测验来评估学生们学习这门课程的效果。)不要偷看后面的内容,去抄“正确”的答案,这样做你将学不到任何东西。

 

目录:

第一部分 C++基础

第1讲 打磨工具    2

1.1 作者推荐    2

1.1.1 Windows平台    2

1.1.2 Macintosh OS 9以及更早版本    3

1.1.3 其他平台    3

1.2 阅读文档    3

1.3 第一个程序    4

第2讲 阅读C++代码    10

2.1 注释    11

2.2 头文件    11

2.3 主程序    13

2.4 变量定义    13

2.5 语句    14

2.6 输出    15

第3讲 整数表达式    17

第4讲 字符串    23

第5讲 简单的输入    28

第6讲 错误消息    33

6.1 拼写错误    34

6.2 错误字符    34

6.3 未知操作符    35

6.4 未知名字    35

6.5 符号错误    36

6.6 从错误中获得乐趣    36

第7讲 For循环    37

7.1 有界循环    37

7.1.1 初始化    37

7.1.2 条件    38

7.1.3 后循环    39

7.1.4 for循环的工作原理    39

7.2 由你来做    39

第8讲 格式化输出    41

8.1 问题    41

8.2 字段宽度    42

8.3 填充    43

8.4 std前缀    44

8.5 对齐    44

8.6 探索格式化    44

8.7 替代语法    46

8.8 由你完成    46

第9讲 数组和向量    49

9.1 用向量代替数组    49

9.2 向量    50

9.3 迭代器    51

9.4 算法    53

9.5 成员类型    54

9.6 使用迭代器和算法    55

第10讲 自增和自减    58

10.1 自增    58

10.2 自减    59

第11讲 条件和逻辑    64

11.1 I/O和bool    64

11.2 布尔类型    65

11.3 逻辑操作符    67

11.4 旧式语法    68

11.5 比较操作符    68

第12讲 复合语句    71

12.1 语句    71

12.2 局部定义和范围    74

12.3 for循环头中的定义    76

第13讲 文件I/O简介    79

13.1 读文件    79

13.2 写文件    80

第14讲 数据结构映射    83

14.1 使用映射    83

14.2 迭代器    84

14.3 搜索映射    86

第15讲 类型同义词    88

15.1 typedef声明    88

15.2 常见的类型定义    89

第16讲 字符    91

16.1 字符类型    91

16.2 字符I/O    93

16.3 换行和移植性    94

16.4 转义字符    94

第17讲 字符分类    96

17.1 字符集    96

17.2 字符分类    98

17.3 区域设置    99

第18讲 大小写转换    103

18.1 简单的大小写    103

18.2 复杂的大小写    104

第19讲 编写函数    107

19.1 函数    107

19.2 函数调用    109

19.3 声明和定义    109

19.4 再谈单词计数    111

19.5 函数main()    113

第20讲 函数实参    115

20.1 实参传递    115

20.2 按引用传递    117

20.3 常量引用    119

20.4 const_iterator    120

20.5 输出参数    121

第21讲 使用算法    122

21.1 传递数据    122

21.2 谓词    126

21.3 其他算法    128

第22讲 重载函数名    131

第23讲 大数和小数    136

23.1 长整型和短整型    136

23.1.1 长整数    137

23.1.2 短整数    137

23.2 整数字面量    138

23.3 字节长度的整数    139

23.4 类型转换    140

23.5 整数算术    141

23.6 重载解析    142

第24讲 极大数和极小数    145

24.1 浮点数    145

24.2 浮点字面量    146

24.3 浮点特征    147

24.4 浮点I/O    148

第25讲 文档    151

25.1 Doxygen    151

25.2 结构化注释    151

25.3 文档标签    152

25.4 使用Doxygen    156

第26讲 项目1:身体质量指数    157

第二部分 自定义类型

第27讲 自定义类型    160

27.1 定义新类型    160

27.2 成员函数    161

27.3 构造函数    164

27.4 重载构造函数    166

第28讲 重载操作符    167

28.1 比较有理数    167

28.2 算术操作符    171

28.3 数学函数    173

第29讲 自定义I/O操作符    175

29.1 输入操作符    175

29.2 输出操作符    176

29.3 错误状态    177

第30讲 赋值与初始化    179

30.1 赋值操作符    179

30.2 构造函数    180

30.3 合并    181

第31讲 编写类    186

31.1 类的结构    186

31.2 成员函数    187

31.3 构造函数    189

第32讲 深入探索成员函数    193

32.1 调用默认构造函数    193

32.2 重温Project 1    196

32.3 const成员函数    199

第33讲 访问级别    203

33.1 公有与私有    203

33.2 class与struct    206

33.3 简单的旧式数据    206

33.4 公有还是私有    207

第34讲 面向对象编程介绍    212

34.1 书籍与杂志    212

34.2 分类    213

34.3 继承    215

34.4 Liskov置换原则    216

34.5 类型多态    216

第35讲 继承    218

35.1 派生类    218

35.2 析构函数    221

35.3 访问级别    224

35.4 编程风格    225

第36讲 虚函数    226

36.1 类型多态    226

36.2 虚函数    229

36.3 引用与切除    230

36.4 纯虚函数    231

36.5 虚析构函数    232

第37讲 类与类型    233

37.1 类与typedef    233

37.2 值类型    236

37.2.1 复制    236

37.2.2 赋值    236

37.2.3 比较    236

37.3 资源获取即为初始化    239

第38讲 声明与定义    241

38.1 声明与定义    241

38.2 内联函数    243

38.3 变量声明与定义    244

38.4 静态变量    246

38.5 静态数据成员    248

38.6 声明符    250

第39讲 使用多个源文件    251

39.1 多个源文件    251

39.2 声明与定义    252

39.3 #include文件    254

39.3.1 引号与括号    256

39.3.2 嵌套#include指令    256

39.3.3 包含监护    257

39.3.4 文档    258

39.4 外部变量    261

39.5 内联函数    261

39.6    “一份定义”规则    262

第40讲 函数对象    264

40.1 函数调用操作符    264

40.2 函数对象    265

40.3 复用成员函数    269

40.4 生成器函子    270

第41讲 有用的算法    272

41.1 搜索    272

41.1.1 线性搜索算法    272

41.1.2 二分搜索算法    276

41.2 比较    279

41.3 重组织数据    281

41.4 复制数据    282

41.5 删除元素    283

41.6 迭代器    284

第42讲 迭代器    285

42.1 迭代器的种类    285

42.1.1 输入迭代器    286

42.1.2 输出迭代器    286

42.1.3 前向迭代器    286

42.1.4 双向迭代器    287

42.1.5 随机访问迭代器    287

42.2 使用迭代器工作    288

42.3 const_iterator与const iterator    290

42.4 错误消息    292

42.5 专用迭代器    292

42.6 迭代器要点    294

第43讲 异常    296

43.1 异常介绍    296

43.2 捕获异常    297

43.3 抛出异常    299

43.4 程序栈    300

43.5 标准异常    304

43.6 I/O异常    304

43.7 自定义异常    306

43.8 对异常的建议    307

第44讲 更多操作符    309

44.1 条件操作符    309

44.2 短路操作符    311

44.3 逗号操作符    311

44.4 算术赋值操作符    313

44.5 自增与自减    315

第45讲 项目2:定点数    318

第三部分 泛型编程

第46讲 函数模板    324

46.1 泛型函数    324

46.2 使用函数模板    325

46.3 编写函数模板    326

46.4 模板形参    328

46.5 模板实参    329

46.6 声明与定义    331

46.7 成员函数模板    331

第47讲 类模板    333

47.1 参数化类型    333

47.2 参数化rational类    334

47.3 使用类模板    336

47.4 重载的操作符函数    338

47.5 混合类型    340

第48讲 模板特化    342

48.1 实例化与特化    342

48.2 自定义比较函数    345

48.3 特化函数模板    346

48.4 特征    347

第49讲 部分特化    349

49.1 退化的pair    349

49.2 部分特化    350

49.3 部分特化函数模板    351

49.4 值模板形参    351

第50讲 名字与名字空间    353

50.1 名字空间    353

50.2 嵌套名字空间    355

50.3 全局名字空间    358

50.4 名字空间std    358

50.5 使用名字空间    359

50.5.1 using指令    359

50.5.2 using声明    361

50.5.3 类中的using声明    363

50.6 无名名字空间    364

50.7 名字查找    365

第51讲 容器    370

51.1 容器的性质    370

51.2 技术报告1    371

51.3 成员类型    372

51.4 容器里能放什么    373

51.5 插入与清除    374

51.5.1 顺序容器的插入操作    374

51.5.2 顺序容器的清除操作    375

51.5.3 关联容器的插入操作    375

51.5.4 关联容器的清除操作    376

51.5.5 异常    377

51.6 迭代器与引用    377

51.7 顺序容器    380

51.7.1 类模板array    381

51.7.2 类模板deque    382

51.7.3 类模板list    383

51.7.4 类模板vector    384

51.8 关联容器    385

第52讲 国际字符    389

52.1 为何要“宽”    389

52.2 使用宽字符    389

52.3 宽字符串    390

52.4 宽字符的I/O操作    392

52.5 多字节字符集    393

52.6 Unicode    394

52.7 通用字符名字    396

第53讲 区域设置与分面    397

53.1 问题    397

53.2 拯救者“区域设置”    398

53.3 区域设置与I/O    399

53.4 分面    399

53.5 字符类别    402

53.6 排序规则    406

第54讲 文本I/O    410

54.1 文件模式    410

54.2 字符串流    411

54.3 文本转换    417

54.4 Boost词法转换    420

第55讲 项目3:货币类型    422

第四部分 实时编程

第56讲 指针    424

56.1 问题    424

56.2 解决方案    432

56.3 地址与指针    433

56.4 依赖图    434

第57讲 动态内存    437

57.1 分配内存    437

57.2 释放内存    438

57.3 指向为空的指针    438

57.4 实现标准容器    440

57.5 增加变量    441

57.6 特殊成员函数    448

第58讲 异常—安全    452

58.1 内存泄漏    452

58.2 异常与动态内存    454

58.3 自动删除指针    456

58.4 auto_ptr不能做的事    458

58.5 异常与构造函数    458

第59讲 旧式数组    462

59.1 C风格的数组    462

59.2 数组的限制    463

59.3 动态分配数组    464

59.4 多维数组    465

59.5 C风格的字符串    466

59.6 命令行参数    466

59.7 指针运算    468

第60讲 智能指针    470

60.1 重新审视auto_ptr    470

60.2 可复制智能指针    472

60.3 智能数组    474

60.4 Pimpl    474

60.5 迭代器    482

第61讲 位操作    483

61.1 将整数作为位的集合    483

61.2 位掩码    485

61.3 移位    486

61.4 使用无符号类型安全移位    487

61.4.1 有符号与无符号类型    488

61.4.2 无符号字面量    488

61.4.3 类型转换    489

61.5 溢出    493

61.6 位域简介    493

61.7 可移植性    494

61.8    bitset类模板    495

第62讲 枚举    498

62.1 理想的枚举    498

62.2 作为位掩码的枚举    499

62.3 模拟枚举    500

62.3.1 枚举计算机语言    500

62.3.2 对语言进行比较    501

62.3.3 赋值    502

62.3.4 字符串和语言    503

62.3.5 初始化    508

62.3.6 读写语言    508

62.3.7 使用模拟的枚举    509

62.4 重新审视项目    510

第63讲 多重继承    512

63.1 多重基类    512

63.2 虚基类    514

63.3 类Java接口    516

63.4 接口与模板    518

63.5 Mix-in    519

63.6 友元来帮忙    521

第64讲 特征萃取与策略    524

64.1 案例研究:迭代器    524

64.2 迭代器特征萃取    528

64.3 案例研究:char_traits    529

64.4 基于策略的编程    530

第65讲 名字与模板    538

65.1 限定名的问题    538

65.2 非限定名的问题    540

第66讲 重载函数    546

66.1 重载函数回顾    546

66.2 重载解析    549

66.2.1 候选函数    549

66.2.2 可行函数    551

66.2.3 最佳可行函数    551

66.3 默认实参    555

第67讲 元编程    557

67.1 编译时编程    557

67.2 模板特化    557

67.3 部分特化    559

 

第68讲 项目4:计算器    566