新書推薦:
《
吕著中国通史
》
售價:NT$
286.0
《
爱琴海的光芒 : 千年古希腊文明
》
售價:NT$
908.0
《
不被他人左右:基于阿德勒心理学的无压力工作法
》
售價:NT$
301.0
《
SDGSAT-1卫星热红外影像图集
》
售價:NT$
2030.0
《
股市趋势技术分析(原书第11版)
》
售價:NT$
1010.0
《
汉匈战争全史
》
售價:NT$
454.0
《
恶的哲学研究(社会思想丛书)
》
售價:NT$
500.0
《
不止江湖
》
售價:NT$
449.0
|
編輯推薦: |
通过阅读本书,读者可快速掌握C++的基本知识并学习其中更高 级的功能和概念。本书根据C++14标准进行了全面修订,展望了C++17,并从实用的角度诠释C++语言,帮助读者学习如何使用它创建速度更快、更简洁、更高效的C++应用程序。
掌握C++和面向对象编程的基本知识。
理解如何使用lambda表达式、移动构造函数和赋值运算符等C++功能编写简洁、高效的代码。
学习C++编程的实践并避开常见的陷阱。
学习标准模板库,包括大多数真实C++应用程序都要用到的容器和算法。
使用每章末尾的练习来检验对知识的掌握程度。
通过阅读本书,读者可快速掌握C++的基本知识并学习其中更高 级的功能和概念。本书根据C++14标准进行了全面修订,展望了C++17,并从实用的角度诠释C++语言,帮助读者学习如何使用它创建速度更快、更简洁、更高效的C++应用程序。
掌握C++和面向对象编程的基本知识。
理解如何使用lambda表达式、移动构造函数和赋值运算符等C++功能编写简洁、高效的代码。
学习C++编程的实践并避开常见的陷阱。
学习标准模板库,包括大多数真实C++应用程序都要用到的容器和算法
|
內容簡介: |
《21天学通C++(第8版)》通过大量短小精悍的程序详细而全面地阐述了C++基本概念和技术,以及C++11、C++14和C++17新增的功能,包括管理输入输出、循环和数组、面向对象编程、模板、使用标准模板库、列表初始化、lambda表达式、自动类型推断等。这些内容被组织成结构合理、联系紧密的章节,每章都可在1小时内阅读完毕;每章都提供了示例程序清单,并辅以示例输出和代码分析,以阐述该章介绍的主题。为加深读者对所学内容的理解,每章末尾都提供了常见问题及其答案以及练习和测验。读者可对照附录E提供的测验和练习答案,了解自己对所学内容的掌握程度。
《21天学通C++(第8版)》是针对C++初学者编写的,不要求读者有C语言方面的背景知识,可作为高等院校教授C++课程的教材,也可供初学者自学C++时使用。
|
關於作者: |
Siddhartha Rao是全球企业软件提供商SAP SE负责安全响应的副总裁。C++的发展让他深信,您能编写速度更快、更简洁、更强大的C++应用程序。Siddhartha酷爱旅游,还是山地自行车运动的狂热爱好者;他期待着您对本书的反馈。
|
目錄:
|
第 1章 绪论1
1.1C++简史1
1.1.1与C语言的关系1
1.1.2C++的优点1
1.1.3C++标准的发展历程2
1.1.4哪些人使用C++程序2
1.2编写C++应用程序2
1.2.1生成可执行文件的步骤2
1.2.2分析并修复错误2
1.2.3集成开发环境3
1.2.4编写第 一个C++应用程序3
1.2.5生成并执行第 一个C++应用程序4
1.2.6理解编译错误5
1.3C++新增的功能5
1.4总结5
1.5问与答6
1.6作业6
1.6.1测验6
1.6.2练习6
第 2章 C++程序的组成部分8
2.1Hello World程序的组成部分8
2.1.1预处理器编译指令#include9
2.1.2程序的主体—main 9
2.1.3返回值10
2.2名称空间的概念10
2.3C++代码中的注释11
2.4C++函数12
2.5使用std::cin和std::cout执行基本输入
输出操作14
2.6总结15
2.7问与答15
2.8作业15
2.8.1测验16
2.8.2练习16
第3章 使用变量和常量17
3.1什么是变量17
3.1.1内存和寻址概述17
3.1.2声明变量以访问和使用内存17
3.1.3声明并初始化多个类型相同的
变量19
3.1.4理解变量的作用域19
3.1.5全局变量20
3.1.6命名约定22
3.2编译器支持的常见C++变量类型22
3.2.1使用bool变量存储布尔值23
3.2.2使用char变量存储字符23
3.2.3有符号整数和无符号整数的
概念24
3.2.4有符号整型short、int、long和
long long24
3.2.5无符号整型unsigned short、unsigned int、unsigned long和unsigned long long25
3.2.6选择正确的数据类型以免发生
溢出错误25
3.2.7浮点类型float和double26
3.3使用sizeof确定变量的长度26
3.4使用auto自动推断类型28
3.5使用typedef替换变量类型29
3.6什么是常量30
3.6.1字面常量30
3.6.2使用const将变量声明为常量30
3.6.3使用constexpr定义常量表达式31
3.6.4枚举32
3.6.5使用#define定义常量34
3.7不能用作常量或变量名的关键字34
3.8总结35
3.9问与答36
3.10作业37
3.10.1测验37
3.10.2练习37
第4章 管理数组和字符串38
4.1什么是数组38
4.1.1为何需要数组38
4.1.2声明和初始化静态数组39
4.1.3数组中的数据是如何存储的39
4.1.4访问存储在数组中的数据40
4.1.5修改存储在数组中的数据41
4.2多维数组43
4.2.1声明和初始化多维数组44
4.2.2访问多维数组中的元素44
4.3动态数组45
4.4C风格字符串46
4.5C++字符串:使用std::string48
4.6总结50
4.7问与答50
4.8作业50
4.8.1测验51
4.8.2练习51
第5章 使用表达式、语句和运算符52
5.1语句52
5.2复合语句(语句块)53
5.3使用运算符53
5.3.1赋值运算符(=)53
5.3.2理解左值和右值53
5.3.3加法运算符(+)、减法运算符( )、乘法运算符(*)、除法运算符()和求模运算符(%)53
5.3.4递增运算符(++)和递减运算符
()54
5.3.5前缀还是后缀55
5.3.6相等运算符(==)和不等运算符
(!=)56
5.3.7关系运算符56
5.3.8逻辑运算NOT、AND、OR和
XOR58
5.3.9使用C++逻辑运算NOT(!)、AND(&&)和OR(||)59
5.3.10按位运算符NOT(~)、AND(&)、OR(|)和XOR(^)63
5.3.11按位右移运算符()和左移
运算符()访问成员146
9.2关键字public和private147
9.3构造函数150
9.3.1声明和实现构造函数150
9.3.2何时及如何使用构造函数151
9.3.3重载构造函数152
9.3.4没有默认构造函数的类154
9.3.5带默认值的构造函数参数155
9.3.6包含初始化列表的构造函数156
9.4析构函数157
9.4.1声明和实现析构函数157
9.4.2何时及如何使用析构函数158
9.5复制构造函数160
9.5.1浅复制及其存在的问题160
9.5.2使用复制构造函数确保深复制162
9.5.3有助于改善性能的移动构造
函数166
9.6构造函数和析构函数的其他用途166
9.6.1不允许复制的类167
9.6.2只能有一个实例的单例类167
9.6.3禁止在栈中实例化的类169
9.6.4使用构造函数进行类型转换171
9.7this指针172
9.8将sizeof 用于类173
9.9结构不同于类的地方175
9.10声明友元176
9.11共用体:一种特殊的数据存储
机制178
9.11.1声明共用体178
9.11.2在什么情况下使用共用体178
9.12对类和结构使用聚合初始化180
9.13总结183
9.14问与答183
9.15作业184
9.15.1测验184
9.15.2练习184
第 10章 实现继承185
10.1继承基础185
10.1.1继承和派生186
10.1.2C++派生语法186
10.1.3访问限定符protected188
10.1.4基类初始化—向基类传递
参数190
10.1.5在派生类中覆盖基类的方法192
10.1.6调用基类中被覆盖的方法194
10.1.7在派生类中调用基类的方法194
10.1.8在派生类中隐藏基类的方法196
10.1.9构造顺序198
10.1.10析构顺序198
10.2私有继承200
10.3保护继承202
10.4切除问题205
10.5多继承205
10.6使用final禁止继承207
10.7总结208
10.8问与答208
10.9作业208
10.9.1测验208
10.9.2练习209
第 11章 多态210
11.1多态基础210
11.1.1为何需要多态行为210
11.1.2使用虚函数实现多态行为212
11.1.3为何需要虚构造函数213
11.1.4虚函数的工作原理—理解
虚函数表217
11.1.5抽象基类和纯虚函数220
11.2使用虚继承解决菱形问题222
11.3表明覆盖意图的限定符override225
11.4使用final来禁止覆盖函数226
11.5可将复制构造函数声明为虚函数吗227
11.6总结230
11.7问与答230
11.8作业231
11.8.1测验231
11.8.2练习231
第 12章 运算符类型与运算符重载232
12.1C++运算符232
12.2单目运算符233
12.2.1单目运算符的类型233
12.2.2单目递增与单目递减运算符234
12.2.3转换运算符236
12.2.4解除引用运算符(*)和成员选择
运算符(-)238
12.3双目运算符239
12.3.1双目运算符的类型240
12.3.2双目加法与双目减法运算符240
12.3.3实现运算符+=与 =242
12.3.4重载等于运算符(==)和不等运算
符(!=)243
12.3.5重载运算符、=245
12.3.6重载复制赋值运算符(=)248
12.3.7下标运算符250
12.4函数运算符operator253
12.5用于高性能编程的移动构造函数和
移动赋值运算符254
12.5.1 不必要的复制带来的问题254
12.5.2 声明移动构造函数和移动赋值
运算符254
12.6用户定义的字面量258
12.7不能重载的运算符260
12.8总结261
12.9问与答261
12.10作业261
12.10.1测验261
12.10.2练习261
第 13章 类型转换运算符262
13.1为何需要类型转换262
13.2为何有些C++程序员不喜欢C风格
类型转换263
13.3C++类型转换运算符263
13.3.1使用static_cast263
13.3.2使用dynamic_cast和运行阶段
类型识别264
13.3.3使用reinterpret_cast267
13.3.4使用const_cast267
13.4C++类型转换运算符存在的问题268
13.5总结269
13.6问与答269
13.7作业270
13.7.1测验270
13.7.2练习270
第 14章 宏和模板简介271
14.1预处理器与编译器271
14.2使用#define定义常量271
14.3使用#define编写宏函数274
14.3.1为什么要使用括号276
14.3.2使用assert宏验证表达式276
14.3.3使用宏函数的优点和缺点277
14.4模板简介278
14.4.1模板声明语法278
14.4.2各种类型的模板声明279
14.4.3模板函数279
14.4.4模板与类型安全281
14.4.5模板类281
14.4.6声明包含多个参数的模板282
14.4.7声明包含默认参数的模板283
14.4.8一个模板示例283
14.4.9模板的实例化和具体化284
14.4.10模板类和静态成员286
14.4.11参数数量可变的模板287
14.4.12使用static_assert执行编译阶段
检查290
14.4.13在实际C++编程中使用模板290
14.5总结291
14.6问与答291
14.7作业291
14.7.1测验291
14.7.2练习292
第 15章 标准模板库简介293
15.1STL容器293
15.1.1顺序容器293
15.1.2关联容器294
15.1.3容器适配器294
15.2STL迭代器295
15.3STL算法295
15.4使用迭代器在容器和算法之间交互295
15.5选择正确的容器297
15.6STL字符串类298
15.7总结298
15.8问与答299
15.9作业299
第 16章 STL string类300
16.1为何需要字符串操作类300
16.2使用STL string类301
16.2.1实例化和复制STL string301
16.2.2访问std::string的字符内容303
16.2.3拼接字符串305
16.2.4在string中查找字符或
子字符串306
16.2.5截短STL string307
16.2.6字符串反转309
16.2.7字符串的大小写转换310
16.3基于模板的STL string实现311
16.4总结312
16.5问与答312
16.6作业313
16.6.1测验313
16.6.2练习313
第 17章 STL动态数组类314
17.1std::vector的特点314
17.2典型的vector操作314
17.2.1实例化vector314
17.2.2使用push_back 在末尾插入
元素316
17.2.3列表初始化317
17.2.4使用insert 在指定位置插入
元素317
17.2.5使用数组语法访问vector中的
元素319
17.2.6使用指针语法访问vector中的
元素320
17.2.7删除vector中的元素321
17.3理解大小和容量322
17.4STL deque 类324
17.5总结326
17.6问与答326
17.7作业327
17.7.1测验327
17.7.2练习327
第 18章 STL list和forward_list328
18.1std::list的特点328
18.2基本的list操作328
18.2.1实例化std::list对象328
18.2.2在list开头或末尾插入元素330
18.2.3在list中间插入元素331
18.2.4删除list中的元素333
18.3对list中的元素进行反转和排序334
18.3.1使用list::reverse 反转元素的
排列顺序334
18.3.2对元素进行排序335
18.3.3对包含对象的list进行排序以及
删除其中的元素337
18.3.4C++11引入的std::forward_list340
18.4总结341
18.5问与答342
18.6作业342
18.6.1测验342
18.6.2练习342
第 19章 STL集合类343
19.1简介343
19.2STL set和multiset的基本操作344
19.2.1实例化std::set对象344
19.2.2在set或multiset中插入元素345
19.2.3在STL set或multiset中查找
元素347
19.2.4删除STL set或multiset中的
元素348
19.3使用STL set和multiset的优缺点352
19.4总结354
19.5问与答355
19.6作业355
19.6.1测验355
19.6.2练习355
第 20章 STL映射类356
20.1STL映射类简介356
20.2STL map和multimap的基本操作357
20.2.1实例化std::map和
std::multimap357
20.2.2在STL map或multimap中插入
元素358
20.2.3在STL map或multimap中查找
元素361
20.2.4在STL multimap中查找元素363
20.2.5删除STL map或multimap中的
元素363
20.3提供自定义的排序谓词365
20.4基于散列表的STL键-值对容器368
20.4.1散列表的工作原理368
20.4.2使用unordered_map和unordered_
multimap368
20.5总结372
20.6问与答372
20.7作业372
20.7.1测验373
20.7.2练习373
第 21章 理解函数对象374
21.1函数对象与谓词的概念374
21.2函数对象的典型用途374
21.2.1一元函数374
21.2.2一元谓词378
21.2.3二元函数380
21.2.4二元谓词381
21.3总结383
21.4问与答384
21.5作业384
21.5.1测验384
21.5.2练习384
第 22章 lambda表达式385
22.1lambda表达式是什么385
22.2如何定义lambda表达式386
22.3一元函数对应的lambda表达式386
22.4一元谓词对应的lambda表达式387
22.5通过捕获列表接受状态变量的lambda
表达式388
22.6lambda表达式的通用语法390
22.7二元函数对应的lambda表达式391
22.8二元谓词对应的lambda表达式392
22.9总结394
22.10问与答394
22.11作业395
22.11.1测验395
22.11.2练习395
第 23章 STL算法396
23.1什么是STL算法396
23.2STL算法的分类396
23.2.1非变序算法396
23.2.2变序算法397
23.3使用STL算法398
23.3.1根据值或条件查找元素398
23.3.2计算包含给定值或满足给定条件的
元素数400
23.3.3在集合中搜索元素或序列401
23.3.4将容器中的元素初始化为
指定值403
23.3.5使用std::generate 将元素设置为
运行阶段生成的值405
23.3.6使用for_each 处理指定范围内的
元素406
23.3.7使用std::transform 对范围进行
变换407
23.3.8复制和删除操作409
23.3.9替换值以及替换满足给定条件的
元素412
23.3.10排序、在有序集合中搜索以及删除
重复元素413
23.3.11将范围分区415
23.3.12在有序集合中插入元素417
23.4总结419
23.5问与答419
23.6作业419
23.6.1测验420
23.6.2练习420
第 24章 自适应容器:栈和队列421
24.1栈和队列的行为特征421
24.1.1栈421
24.1.2队列422
24.2使用STL stack类422
24.2.1实例化stack422
24.2.2stack的成员函数423
24.2.3使用push 和pop 在栈顶插入和
删除元素424
24.3使用STL queue类425
24.3.1实例化queue425
24.3.2queue的成员函数426
24.3.3使用push 在队尾插入以及使用
pop 从队首删除427
24.4使用STL优先级队列428
24.4.1实例化priority_queue类428
24.4.2priority_queue的成员
函数429
24.4.3使用push 在priority_queue末尾
插入以及使用pop 在priority_queue
开头删除430
24.5总结432
24.6问与答432
24.7作业432
24.7.1测验432
24.7.2练习432
第 25章 使用STL位标志433
25.1bitset类433
25.2使用std::bitset及其成员434
25.2.1std:bitset的运算符434
25.2.2std::bitset的成员方法435
25.3vector437
25.3.1实例化vector437
25.3.2vector的成员函数和
运算符438
25.4总结439
25.5问与答439
25.6作业439
25.6.1测验439
25.6.2练习440
第 26章 理解智能指针441
26.1什么是智能指针441
26.1.1常规(原始)指针存在的
问题441
26.1.2智能指针有何帮助442
26.2智能指针是如何实现的442
26.3智能指针类型443
26.3.1深复制443
26.3.2写时复制机制445
26.3.3引用计数智能指针445
26.3.4引用链接智能指针445
26.3.5破坏性复制445
26.3.6使用std::unique_ptr447
26.4深受欢迎的智能指针库449
26.5总结449
26.6问与答449
26.7作业450
26.7.1测试450
26.7.2练习450
第 27章 使用流进行输入和输出451
27.1流的概述451
27.2重要的C++流类和流
对象452
27.3使用std::cout将指定格式的数据
写入控制台453
27.3.1使用std::cout修改数字的显示
格式453
27.3.2使用std::cout对齐文本和设置
字段宽度455
27.4使用std::cin进行输入455
27.4.1使用std::cin将输入读取到基本
类型变量中455
27.4.2使用std::cin:get将输入读取到char*
缓冲区中456
27.4.3使用std::cin将输入读取到
std::string中457
27.5使用std::fstream处理文件458
27.5.1使用open 和close 打开和关闭
文件459
27.5.2使用open 创建文本文件并使用
运算符读取文本
文件460
27.5.4读写二进制文件461
27.6使用std::stringstream对字符串进行
转换463
27.7总结464
27.8问与答464
27.9作业465
27.9.1测验465
27.9.2练习465
第 28章 异常处理466
28.1什么是异常466
28.2导致异常的原因466
28.3使用try和catch捕获异常467
28.3.1使用catch…处理所有
异常467
28.3.2捕获特定类型的异常468
28.3.3使用throw引发特定类型的
异常469
28.4异常处理的工作原理470
28.4.1std::exception类472
28.4.2从std::exception派生出自定义
异常类473
28.5总结474
28.6问与答474
28.7作业475
28.7.1测验475
28.7.2练习475
第 29章 继续前行477
29.1当今的处理器有何不同477
29.2如何更好地利用多个内核478
29.2.1线程是什么478
29.2.2为何要编写多线程应用
程序479
29.2.3线程如何交换数据479
29.2.4使用互斥量和信号量同步
线程480
29.2.5多线程技术带来的问题480
29.3编写杰出的C++代码480
29.4C++17有望引入的新特性481
29.4.1支持在if和switch中进行
初始化481
29.4.2保证复制得以避免482
29.4.3避免内存分配开销的
std::string_view482
29.4.4类型安全的共用体替代品
std::variant483
29.4.5使用if constexpr有条件地编译
代码483
29.4.6改进的lambda表达式484
29.4.7在构造函数中使用类型自动推断
功能484
29.5更深入地学习C++484
29.5.1在线文档485
29.5.2提供指南和帮助的社区485
29.6总结485
29.7问与答485
29.8作业485
附录A 二进制和十六进制486
A.1十进制486
A.2二进制486
A.2.1计算机为何使用二进制487
A.2.2位和字节487
A.2.31KB相当于多少字节487
A.3十六进制487
A.4不同进制之间的转换488
A.4.1通用转换步骤488
A.4.2从十进制转换为二进制488
A.4.3从十进制转换为十六进制489
附录B C++关键字490
附录C 运算符优先级491
附录D ASCII码492
附录E 答案495
|
|