《C++入门经典 第10版》PDF下载

  • 购买积分:20 如何计算积分?
  • 作  者:(美)Walter Savitch著;周靖译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2018
  • ISBN:9787302486763
  • 页数:741 页
图书介绍:本书是最优秀的C++入门教材之一,在全球已经拥有数十万读者。作者结合自己多年的教学经验,根据教学大纲精心设计并编写了书中内容。与此同时,还采用了很多便于读者巩固所学知识的教学特征,比如各章开始处的小节总览,书中随处可见的总结框、编程提示和编程陷阱,各章结尾处的小结、习题和编程项目等。这些非常适合初学者掌握重要的编程概念。

第1章 计算机和C+++编程入门 1

1.1计算机系统 2

硬件 2

软件 5

高级语言 6

编译器 7

历史回顾 9

1.2编程和问题求解 9

算法 10

程序设计 11

面向对象编程 12

软件生命周期 12

1.3 C+++入门 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

编程提示:用cin或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.3 C+++循环语句详解 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.1 void函数 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

递归与迭代 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

附录A C+++关键字 729

附录B 操作符的优先级 730

附录C ASCII字符集 731

附录D部分库函数 732

附录E内联函数 736

附录F重载数组索引方括号 737

附录G this指针 738

附录H 将操作符重载为成员操作符 740