
C++入门经典(第10版)
作为C++入门经典教材,本书前几版被全国100多所高校选作C++程式设计课程的教材,很受师生欢迎。《C++入门经典(第10版)》共18章,8个附录。在讲解C++基础知识之后,循序渐进地引导读者深入函式、I/O流、类、控制流程、命名空间、数组、字元串、指针和动态数组、递归、模板、指针和鍊表、派生类、异常以及标準模板库。从简到繁,可以帮助初学者渐入佳境,逐步理解并掌握重要的编程概念。
基本介绍
- 书名:C++入门经典(第10版)
- 作者:[美]Walter Savitch
- 译者:周靖
- ISBN:9787302486763
- 页数:740页
- 出版时间:2018.01.01
- 印次:1-1
- 印刷日期:2017.11.14
出版信息
C++入门经典(第10版)

作者:[美]Walter Savitch着 周靖译
定价:138元
印次:1-1
ISBN:9787302486763
出版日期:2018.01.01
印刷日期:2017.11.14
印次:1-1
ISBN:9787302486763
出版日期:2018.01.01
印刷日期:2017.11.14
内容简介
作为C++入门经典教材,《C++入门经典(第10版)》结合作者多年的教学经验,清楚梳理出一个有利于教与学的结构体系,从各章开头的内容总览,到随处可见的自测题、小结框、编程提示和编程陷阱,再到章末的小结、习题、编程练习和编程项目,由浅入深,从简到繁,可以帮助初学者渐入佳境,逐步理解并掌握重要的编程概念。 《C++入门经典(第10版)》共18章,8个附录。在讲解C++基础知识之后,循序渐进地引导读者深入函式、I/O流、类、控制流程、命名空间、数组、字元串、指针和动态数组、递归、模板、指针和鍊表、派生类、异常以及标準模板库。
目录
目录
第1章计算机和C++编程入门 1
1.1计算机系统 2
硬体 2
软体 5
高级语言 6
编译器 7
历史回顾 9
1.2编程和问题求解 9
算法 10
程式设计 11
面向对象编程 12
软体生命周期 12
1.3C++入门 13
C++语言的起源 13
一个C++示範程式 14
陷阱:在\n中错误地使用斜槓 17
编程提示:输入和输出语法 17
简单C++程式的布局 17
陷阱:在include的档案名称前错误地
添加一个空格 19
编译和运行C++程式 19
陷阱:编译C++11程式 19
编程提示:让程式运行起来 20
1.4测试和调试 22
各种程式错误 22
陷阱:错误地假定程式正确 23
小结 24
自测题答案 25
编程练习 26
编程项目 27
第2章C++基础知识 29
2.1变数和赋值 30
变数 30
名称:标识符 32
变数声明 33
赋值语句 34
陷阱:未初始化的变数 35
编程提示:使用有意义的名称 36
2.2输入和输出 37
使用cout进行输出 37
include预编译指令和命名空间 38
转义序列 39
编程提示:用\n或endl终止
每一个程式 40
格式化带小数点的数字 41
用cin进行输入 42
设计输入和输出 43
编程提示:I/O中的换行 43
2.3数据类型和表达式 44
int类型和double类型 44
其他数值类型 45
C++11类型 46
char类型 47
bool类型 48
string类简介 48
类型的兼容性 49
算术操作符和表达式 50
陷阱:除法中的整数 52
更多赋值语句 53
2.4简单控制流程 54
一个简单的分支机制 54
陷阱:连续的不等式 58
陷阱:该用==的时候用了= 58
複合语句 59
简单的循环机制 61
递增操作符和递减操作符 63
编程实例:信用卡余额 64
陷阱:无限循环 65
2.5程式风格 67
缩进 67
注释 67
为常量命名 69
小结 71
自测题答案 72
编程练习 75
编程项目 76
第3章更多的控制流程 81
3.1使用布尔表达式 82
布尔表达式求值 82
陷阱:将布尔表达式转换成int值 85
枚举类型(选读) 87
3.2多路分支 87
嵌套语句 88
编程提示:在嵌套语句中使用
花括弧 88
多路if-else语句 90
编程实例:州收入税 91
switch语句 94
陷阱:忘记在switch语句中添加
break 96
为选单使用switch语句 97
代码块 98
陷阱:疏忽局部变数 100
3.3C++循环语句详解 101
while语句回顾 101
再论递增操作符和递减操作符 102
for语句 104
陷阱:for语句中多余的分号 108
应该使用哪种循环 108
陷阱:未初始化的变数和
无限循环 110
break语句 110
陷阱:嵌套循环中的break语句 111
3.4设计循环 111
求和与求乘积的循环 112
终止循环 113
嵌套循环 115
调试循环 116
小结 119
自测题答案 120
编程练习 123
编程项目 124
第4章过程抽象和返回值的函式 129
4.1自顶向下设计 130
4.2预定义函式 130
使用预定义函式 131
随机数生成 134
强制类型转换 135
强制类型转换的古老形式 137
陷阱:整数除法丢弃了小数部分 137
4.3程式设计师自定义函式 138
函式定义 138
返回布尔值的函式 142
另一种形式的函式声明 142
陷阱:实参顺序错误 143
函式定义语法小结 144
再论函式定义的位置 144
编程提示:在分支语句中使用
函式调用 145
4.4过程抽象 146
黑盒的比喻 146
编程提示:选择形参名称 147
编程提示:嵌套循环 148
案例分析:购买比萨 150
编程提示:使用伪代码 154
4.5作用域和局部变数 155
函式如同小程式 155
编程实例:豌豆试验田 157
全局常量和全局变数 157
传值形参是局部变数 158
块作用域 160
再论命名空间 161
编程实例:阶乘函式 163
4.6重载函式名称 164
重载入门 164
编程实例:购买比萨(修订版) 166
自动类型转换 168
小结 170
自测题答案 171
编程练习 173
编程项目 174
第5章用函式完成所有子任务 177
5.1void函式 178
void函式的定义 178
编程实例温度换算 180
void函式中的return语句 181
5.2传引用参数 182
初探传引用调用 182
传引用调用详解 184
编程实例:swapValues函式 187
混合的参数列表 188
编程提示:应该使用哪种参数 189
陷阱:疏忽造成的局部变数 190
5.3使用过程抽象 192
在函式中调用其他函式 192
前条件和后条件 193
案例分析:超市定价系统 194
5.4测试和调试函式 198
存根和驱动程式 198
5.5常规调试技术 201
不抱成见 201
检查常见错误 202
定位错误 202
assert宏 203
小结 205
自测题答案 206
编程练习 208
编程项目 209
第6章I/O流——对象和类入门 213
6.1流和基本档案I/O 214
为什幺要用档案来I/O 215
档案I/O 215
类与对象入门 218
编程提示:检查档案是否成功
打开 219
档案I/O技术 222
追加到档案(选读) 223
档案名称作为输入(选读) 225
6.2流I/O工具 227
用流函式格式化输出 227
操纵元 230
流作为函式实参 232
编程提示:检查档案尾 233
命名空间的问题 234
编程实例:整理档案格式 235
6.3字元I/O 236
get和put成员函式 236
putback成员函式(选读) 239
编程实例:检查输入 239
陷阱:输入中不期而遇的'\n' 241
编程实例:另一个newLine函式 242
函式的默认实参(选读) 243
eof成员函式 246
编程实例:编辑文本档案 247
预定义字元函式 249
陷阱:toupper和tolower返回值 250
小结 252
自测题答案 253
编程练习 257
编程项目 258
第7章数组 263
7.1数组入门 264
声明和引用数组 264
编程提示:为数组使用for循环 266
陷阱:数组索引总是从零开始 266
编程提示:为数组长度使用已定义
常量 266
数组在记忆体中的表示 267
陷阱:数组索引越界 268
初始化数组 269
编程提示:C++11基于範围的
for语句 270
7.2函式中的数组 272
索引变数作为函式参数 272
整个数组作为函式参数 274
const参数修饰符 276
陷阱:const参数修饰符的使用
不一致 277
返回数组的函式 278
案例分析:产量图 278
7.3数组编程 287
部分填充数组 287
编程提示:不要吝啬形参 289
编程实例:搜寻数组 290
编程实例:数组排序 291
编程实例:冒泡排序 294
7.4多维数组 297
多维数组基础 297
多维数组参数 298
编程实例:二维打分程式 299
陷阱:在数组索引之间使用逗号 302
小结 303
自测题答案 304
编程练习 306
编程项目 307
第8章字元串和向量 315
8.1字元串的数组类型 316
C字元串值和C字元串变数 317
陷阱:为C字元串使用=和== 319
<cstring>中的其他函式 321
陷阱:使用strcpy複製C字元串
越界 322
C字元串输入和输出 324
C字元串到数值的转换和
可靠输入 326
8.2标準string类 330
标準类string简介 330
string类的I/O 332
编程提示:getline的其他版本 334
陷阱:混合使用cin>>变数;和
getline 335
用string类进行字元串处理 336
编程实例:回文测试 338
string对象和C字元串之间的转换 341
字元串和数字之间的转换 342
8.3向量 342
向量基础知识 342
陷阱:使用方括弧时超出向量
长度 345
编程提示:向量赋值具有良好
行为 345
效率问题 345
小结 347
自测题答案 348
编程练习 349
编程项目 350
第9章指针和动态数组 355
9.1指针 356
指针变数 357
基本记忆体管理 362
陷阱:虚悬指针 362
静态变数和自动变数 362
编程提示:定义指针类型 363
9.2动态数组 364
数组变数和指针变数 365
创建和使用动态数组 366
指针运算(选读) 370
多维动态数组(选读) 371
小结 373
自测题答案 374
编程练习 374
编程项目 375
第10章定义类 379
10.1结构 380
用于异种数据的结构 380
陷阱:结构定义中忘记添加分号 383
结构作为函式参数 384
编程提示:使用层次化结构 384
对结构进行初始化 386
10.2类 388
定义类和成员函式 388
公共成员和私有成员 391
编程提示:将所有成员变数
设为私有 396
编程提示:定义取值函式和
赋值函式 397
编程提示:将赋值操作符用于
对象 398
编程实例:BankAccount类
(版本1) 398
总结类的一些特徵 402
用于初始化的构造函式 403
编程提示:总是包括默认构造
函式 408
陷阱:无参构造函式 409
C++11的成员初始化器和构造
函式委託 410
10.3抽象数据类型 411
用于生成抽象数据类型的类 412
编程实例:类的另一种实现 414
10.4继承 418
派生类 418
定义派生类 419
小结 423
自测题答案 424
编程练习 428
编程项目 428
第11章类中的友元函式、
重载操作符和数组 433
11.1友元函式 434
编程实例:一个相等性函式 434
友元函式 436
编程提示:定义取值函式和
友元函式 438
编程提示:同时使用成员函式和
非成员函式 439
编程实例:Money类(版本1) 439
实现digitToInt(选读) 443
陷阱:数字常量中的前置零 444
const参数修饰符 445
陷阱:修饰符const的用法不一致 447
11.2重载操作符 449
重载操作符 449
用于自动类型转换的构造函式 452
重载一元操作符 453
重载>>和<< 454
11.3数组和类 460
类数组 460
数组作为类成员 463
编程实例:用于部分填充
数组的类 463
11.4类和动态数组 465
编程实例:字元串变数类 466
析构函式 468
陷阱:指针作为传值参数 469
拷贝构造函式 471
重载赋值操作符 474
小结 477
自测题答案 478
编程练习 484
编程项目 484
第12章独立编译和命名空间 491
12.1独立编译 492
ADT回顾 492
案例分析:独立编译的
DigitalTime类 493
使用#ifndef 500
编程提示:定义其他库 502
12.2命名空间 503
命名空间和using预编译指令 503
创建命名空间 504
限定名称 506
命名空间的微妙之处(选读) 507
无名命名空间 508
陷阱:混淆全局命名空间和
无名命名空间 512
小结 513
自测题答案 514
编程练习 515
编程项目 516
第13章指针和鍊表 517
13.1节点和鍊表 518
节点 519
nullptr 521
鍊表 522
在表头插入节点 523
陷阱:丢失节点 525
搜寻鍊表 526
指针作为叠代器 528
在列表中插入和删除节点 528
陷阱:为动态数据结构使用赋值
操作符 531
鍊表的变体 531
类构成的鍊表 533
13.2栈和伫列 536
栈 536
编程实例:栈类 536
伫列 539
编程实例:伫列类 540
小结 544
自测题答案 545
编程练习 546
编程项目 547
第14章递归 553
14.1面向任务的递归函式 554
案例分析:垂直数字 555
深入递归 559
陷阱:无穷递归 560
用于递归的栈 562
陷阱:栈溢出 563
14.2面向值的递归函式 564
要返回值的递归函式的常规形式 564
编程实例:另一个求乘方函式 564
14.3递归思想 567
递归设计技术 567
案例分析:二叉搜寻
(递归思想示例) 569
编程实例:递归成员函式 574
小结 577
自测题答案 578
编程练习 581
编程项目 581
第15章继承 585
15.1继承基础 586
派生类 588
派生类中的构造函式 593
陷阱:使用来自基类的私有
成员变数 595
陷阱:私有成员函式不会继承 596
protected限定符 596
重定义成员函式 598
重定义与重载的比较 600
访问重定义的基函式 601
15.2继承细节 602
不继承的函式 602
派生类中的赋值操作符和
拷贝构造函式 602
派生类中的析构函式 603
15.3多态性 604
晚期绑定 604
C++虚函式 605
虚函式和扩展类型兼容性 609
陷阱:不使用虚成员函式 612
陷阱:试图对虚成员函式定义
不齐全的类进行编译 612
编程提示:使析构函式成为
虚函式 613
小结 615
自测题答案 616
编程练习 619
编程项目 620
第16章异常处理 627
16.1异常处理基础 628
异常处理的简单例子 629
定义自己的异常类 635
多个throw块和catch块 636
陷阱:首先捕捉较具体的异常 638
编程提示:异常类可能很简单 638
在函式中抛出异常 639
异常规範 640
陷阱:派生类中的异常规範 641
16.2用于异常处理的编程技术 642
抛出异常的时机 642
陷阱:未捕捉的异常 643
陷阱:嵌套try-catch块 643
陷阱:滥用异常 644
异常类层次结构 644
测试可用记忆体 644
重新抛出异常 645
小结 646
自测题答案 647
编程练习 647
编程项目 649
第17章模板 651
17.1用于算法抽象的模板 652
函式模板 653
陷阱:编译器的複杂性 656
编程实例:泛型排序函式 657
编程提示:如何定义模板 660
陷阱:为不恰当的类型使用模板 660
17.2用于数据抽象的模板 660
类模板的语法 660
编程实例:数组类 663
小结 668
自测题答案 669
编程练习 671
编程项目 671
第18章标準模板库 675
18.1叠代器 676
using声明 677
叠代器基础 677
编程提示:使用auto简化变数
声明 681
陷阱:编译器问题 681
叠代器的种类 682
常量和可变叠代器 684
逆向叠代器 685
其他种类的叠代器 687
18.2容器 687
顺序容器 687
陷阱:叠代器和删除元素 690
编程提示:容器中的类型定义 691
容器配接器stack和queue 691
关联容器set和map 693
编程提示:为容器使用初始化、
基于範围的for和auto 698
效率问题 699
18.3泛型算法 699
运行时间和大O表示法 700
容器访问运行时间 703
不修改容器的算法 703
会修改容器的算法 706
set算法 707
排序算法 708
18.4不断进化的C++ 708
std::array 709
正则表达式 710
执行绪 713
智慧型指针 717
小结 722
自测题答案 723
编程练习 724
编程项目 724
附录AC++关键字 729
附录B操作符的优先权 730
附录CASCII字元集 731
附录D部分库函式 732
附录E内联函式 736
附录F重载数组索引方括弧 737
附录Gthis指针 738
附录H将操作符重载为成员操作符 740