当前位置首页 > 百科> 正文

C++面向对象程式设计(第7版)

2019-08-02 12:27:39 百科
C++面向对象程式设计(第7版)

C++面向对象程式设计(第7版)

《C++面向对象程式设计(第7版)》是2010年清华大学出版社出版的图书,作者是萨维奇。

基本介绍

  • 书名:C++面向对象程式设计(第7版)
  • 作者:[美] 萨维奇
  • 译者:周靖 
  • ISBN:9787302215301
  • 页数:715
  • 定价:79.00
  • 出版社:清华大学出版社
  • 出版时间:2010-1-1
  • 装帧:平装
  • 开本:16开

编辑推荐

《C++面向对象程式设计(第7版)》历史悠久,在国内外已具有相当高的知名度,是深受师生好评的C++入门经典教材,在国内有近50多所高校採用,更有大量读者用作自学教材,倍受读者青睐和期待
《C++面向对象程式设计(第7版)》第4版,读者好评,请查看
《C++面向对象程式设计(第7版)》第5版,读者好评,请查看
《C++面向对象程式设计(第7版)》第6版,读者好评,请查看,本版被评为“中国大学出版社图书奖首届优秀教材奖”
源远流长,长销十余年的入门经典

内容简介

本书是最优秀的C++入门教材,深受师生欢迎。作者结合自己多年的教学经验,根据教学大纲精心设计并编写了书中内容。与此同时,还採用了很多便于读者巩固所学知识的教学特徵,比如各章开始处的小节总览,书中随处可见的总结框、编程提示和编程陷阱,各章结尾处的小结、习题和编程项目等。这些非常适合初学者掌握重要的编程概念。
全书共18章,6个附录。在讲解C++基础知识之后,直接引导学生深入函式、I/O流、类、控制流程、命名空间、数组、字元串、指针和动态数组、递归、模板、指针和鍊表、派生类、异常以及标準模板库。
Walter Savitch教授的C++入门经典教材
结构严谨、清晰,行文诙谐幽默,妙趣横生
80+技巧提示,30+生动有趣的编程实例
60+精彩视频,410+自测题,220+编程项目

作者简介

萨维奇(Walter Savitch),加州大学圣迭戈分校退休教授。1960年在加州大学伯克利分校获得博士学位,曾担任加州大学圣迭戈分校计算机科学系教授和认知科学跨学科博士项目主任。他在複杂性理论和并行计算模型方面做出了重要贡献,研究领域包括形式语言理论和计算语言学等。除本书外,他还着有一系列编程类教材,深受师生好评,被誉为读者最多的编程入门教材。
译者简介:
周靖,资深译者,涉猎广泛,具有深厚的技术功底和良好的文学素养。早期痴迷于硬体,《微型计算机》杂誌特约作者。继而潜心钻研程式设计,并在这方面积累了丰富的经验。此后专职从事技术图书的翻译。其翻译风格严谨、準确、朴实、流畅,深受读者好评。代表译着有《C++面向对象程式设计》《Windows核心编程(第5版)》、《Visual C# 2008从入门到精通》、《C# 3.0本质论》等。

目录

第1章 计算机和C++编程入门 1
概述 2
1.1 计算机系统 2
1.1.1 硬体 2
1.1.2 软体 5
1.1.3 高级语言 6
1.1.4 编译器 7
1.1.5 历史回顾 9
1.2 编程和问题求解 10
1.2.1 算法 10
1.2.2 程式设计 11
1.2.3 面向对象编程 12
1.2.4 软体的生命周期 13
1.3 C++入门 14
1.3.1 C++语言的起源 14
1.3.2 一个C++示範程式 15
1.3.3 陷阱:在\n中错误地使用斜槓 17
1.3.4 编程提示:输入和输出语法 17
1.3.5 简单C++程式的布局 18
1.3.6 陷阱:在include的档案名称前错误地添加一个空格 19
1.3.7 编译和运行C++程式 20
1.3.8 编程提示:让程式运行起来 20
1.4 测试和调试 23
1.4.1 程式错误的分类 23
1.4.2 陷阱:错误地假定程式正确 24
小结 25
自测题答案 25
编程项目 26
第2章 C++基础知识 29
概述 30
预备知识 30
2.1 变数和赋值 30
2.1.1 变数 30
2.1.2 名称:标识符 32
2.1.3 变数声明 33
2.1.4 赋值语句 34
2.1.5 陷阱:未初始化的变数 35
2.1.6 编程提示:使用有意义的名称 36
2.2 输入和输出 37
2.2.1 使用cout进行输出 37
2.2.2 include预编译指令和命名空间 38
2.2.3 转义序列 39
2.2.4 编程提示:用\n或endl终止每一个程式 40
2.2.5 格式化带小数点的数字 41
2.2.6 用cin进行输入 42
2.2.7 设计输入和输出 43
2.2.8 编程提示:I/O中的换行 43
2.3 数据类型和表达式 45
2.3.1 int类型和double类型 45
2.3.2 其他数字类型 46
2.3.3 char类型 47
2.3.4 bool类型 48
2.3.5 string类简介 48
2.3.6 类型的兼容性 50
2.3.7 算术操作符和表达式 51
2.3.8 陷阱:除法中的整数 53
2.3.9 更多赋值语句 54
2.4 简单控制流程 55
2.4.1 一个简单的分支机制 55
2.4.2 陷阱:连续的不等式 59
2.4.3 陷阱:在该用==的时候错用了= 59
2.4.4 複合语句 60
2.4.5 简单的循环机制 62
2.4.6 递增操作符和递减操作符 65
2.4.7 编程实例:信用卡余额 65
2.4.8 陷阱:无限循环 66
2.5 程式风格 69
2.5.1 缩进 69
2.5.2 注释 69
2.5.3 为常量命名 71
小结 73
自测题答案 73
编程项目 76
第3章 更多的控制流程 81
概述 82
预备知识 82
3.1 使用布尔表达式 82
3.1.1 布尔表达式求值 82
3.1.2 陷阱:将布尔表达式转换成int值 85
3.1.3 枚举类型(选读) 87
3.2 多路分支 88
3.2.1 嵌套语句 88
3.2.2 编程提示:在嵌套语句中使用花括弧 88
3.2.3 多路if-else语句 90
3.2.4 编程实例:州收入税 92
3.2.5 switch语句 94
3.2.6 陷阱:忘记在switch语句中添加break 97
3.2.7 为选单使用switch语句 97
3.2.8 语句块 98
3.2.9 陷阱:疏忽局部变数 100
3.3 C++循环语句详解 102
3.3.1 while语句回顾 102
3.3.2 再论递增操作符和递减操作符 103
3.3.3 for语句 105
3.3.4 陷阱:for语句中多余的分号 109
3.3.5 应该使用哪种循环 109
3.3.6 陷阱:未初始化的变数和无限循环 111
3.3.7 break语句 111
3.3.8 陷阱:嵌套循环中的break语句 112
3.4 设计循环 113
3.4.1 求和与求乘积的循环 113
3.4.2 终止循环 114
3.4.3 嵌套循环 116
3.4.4 调试循环 118
小结 121
自测题答案 121
编程项目 125
第4章 过程抽象和返回一个值的函式 129
概述 130
预备知识 130
4.1 自顶向下设计 130
4.2 预定义函式 130
4.2.1 使用预定义函式 131
4.2.2 强制类型转换 134
4.2.3 强制类型转换的古老形式 136
4.2.4 陷阱:整数除法丢弃了小数部分 136
4.3 程式设计师自定义函式 138
4.3.1 函式定义 138
4.3.2 能返回布尔值的函式 142
4.3.3 另一种形式的函式声明 142
4.3.4 陷阱:实参顺序错误 143
4.3.5 函式定义语法总结 144
4.3.6 再论函式定义的位置 144
4.3.7 编程提示:在分支语句中使用函式调用 145
4.4 过程抽象 146
4.4.1 黑盒的比喻 146
4.4.2 编程提示:选择形参名称 147
4.4.3 编程提示:嵌套循环 148
4.4.4 案例分析:购买比萨 150
4.4.5 编程提示:使用伪代码 155
4.5 局部变数 156
4.5.1 函式如同小程式 156
4.5.2 编程实例:豌豆试验田 158
4.5.3 全局常量和全局变数 158
4.5.4 传值调用形参是局部变数 160
4.5.5 再论命名空间 161
4.5.6 编程实例:阶乘函式 163
4.6 重载函式名称 165
4.6.1 重载入门 165
4.6.2 编程实例;购买比萨(修订版) 167
4.6.3 自动类型转换 169
小结 171
自测题答案 171
编程项目 174
第5章 所有子任务的函式 177
概述 178
预备知识 178
5.1 void函式 178
5.1.1 void函式的定义 178
5.1.2 编程实例:温度换算 180
5.1.3 void函式中的return语句 181
5.2 传引用调用形参 183
5.2.1 初探传引用调用 183
5.2.2 传引用调用详解 185
5.2.3 编程实例:swap_values函式 187
5.2.4 混合的参数列表 188
5.2.5 编程提示:应该使用哪种参数 189
5.2.6 陷阱:疏忽造成的局部变数 190
5.3 使用过程抽象 192
5.3.1 由函式来调用函式 192
5.3.2 前条件和后条件 193
5.3.3 案例分析:超市定价系统 194
5.4 测试和调试函式 199
5.5 常规调试技术 203
5.5.1 不抱成见 203
5.5.2 检查常见错误 203
5.5.3 定位错误 203
5.5.4 assert宏 204
小结 206
自测题答案 206
编程项目 209
第6章 I/O流——对象和类入门 213
概述 214
预备知识 214
6.1 流和基本档案I/O 214
6.1.1 档案之于I/O的重要性 215
6.1.2 档案I/O 215
6.1.3 类与对象入门 218
6.1.4 编程提示:检查档案是否成功打开 220
6.1.5 档案I/O技术 222
6.1.6 追加到档案(选读) 224
6.1.7 档案名称作为输入(选读) 225
6.2 流I/O工具 228
6.2.1 用流函式格式化输出 228
6.2.2 操纵元 231
6.2.3 流作为函式实参 233
6.2.4 编程提示:检查档案尾 234
6.2.5 命名空间的问题 235
6.2.6 编程实例:整理档案格式 236
6.3 字元I/O 238
6.3.1 get和put成员函式 238
6.3.2 putback成员函式(选读) 241
6.3.3 编程实例:检查输入 241
6.3.4 陷阱:输入中不期而遇的\n 243
6.3.5 eof成员函式 245
6.3.6 编程实例:编辑文本档案 247
6.3.7 预定义的字元函式 248
6.3.8 陷阱:toupper和tolower返回值 249
小结 251
自测题答案 251
编程项目 255
第7章 数组 261
概述 262
预备知识 262
7.1 数组入门 262
7.1.1 声明和引用数组 262
7.1.2 编程提示:为数组使用for循环 264
7.1.3 陷阱:数组索引总是从零开始 264
7.1.4 编程提示:为数组长度使用一个已定义常量 264
7.1.5 数组在记忆体中的表示 265
7.1.6 陷阱:数组索引越界 266
7.1.7 初始化数组 267
7.2 函式中的数组 269
7.2.1 索引变数作为函式参数 269
7.2.2 整个数组作为函式参数 270
7.2.3 const参数修饰符 273
7.2.4 陷阱:不一致地使用const参数 274
7.2.5 返回数组的函式 275
7.2.6 案例分析:产量图 275
7.3 数组编程 285
7.3.1 部分填充数组 285
7.3.2 编程提示:不要吝啬形参 287
7.3.3 编程实例:数组搜寻 287
7.3.4 编程实例:数组排序 289
7.4 多维数组 293
7.4.1 多维数组基础 293
7.4.2 多维数组参数 294
7.4.3 编程实例:二维打分程式 295
7.4.4 陷阱:在数组索引之间使用逗号 297
小结 299
自测题答案 299
编程项目 302
第8章 字元串和向量 309
概述 310
预备知识 310
8.1 字元串的一种数组类型 310
8.1.1 C字元串值和C字元串变数 311
8.1.2 陷阱:为C字元串使用=和== 313
8.1.3 (cstring)中的其他函式 315
8.1.4 C字元串输入和输出 318
8.1.5 C字元串到数字的转换和可靠输入 320
8.2 标準string类 324
8.2.1 标準类string简介 324
8.2.2 string类的I/O 326
8.2.3 编程提示:getline的其他版本 328
8.2.4 陷阱:混合使用“cin ))变数;”和getline 329
8.2.5 用string类进行字元串处理 330
8.2.6 编程实例:回文测试 333
8.2.7 string对象和C字元串之间的转换 335
8.3 向量 337
8.3.1 向量基础知识 337
8.3.2 陷阱:使用方括弧时超出向量长度 339
8.3.3 编程提示:向量赋值具有良好行为 340
8.3.4 效率问题 340
小结 342
自测题答案 342
编程项目 344
第9章 指针和动态数组 349
概述 350
预备知识 350
9.1 指针 350
9.1.1 指针变数 351
9.1.2 基本记忆体管理 356
9.1.3 陷阱:虚悬指针 356
9.1.4 静态变数和自动变数 356
9.1.5 编程提示:定义指针类型 357
9.2 动态数组 359
9.2.1 数组变数和指针变数 359
9.2.2 创建和使用动态数组 360
9.2.3 指针运算(选读) 363
9.2.4 多维动态数组(选读) 364
小结 367
自测题答案 367
编程项目 368
第10章 定义类 371
概述 372
预备知识 372
10.1 结构 372
10.1.1 用于异种数据的结构 372
10.1.2 陷阱:结构定义中忘记添加分号 376
10.1.3 结构作为函式参数 376
10.1.4 编程提示:使用层次化结构 377
10.1.5 对结构进行初始化 378
10.2 类 381
10.2.1 定义类和成员函式 381
10.2.2 公共成员和私有成员 384
10.2.3 编程提示:将所有成员变数变成私有 389
10.2.4 编程提示:定义取值函式和赋值函式 390
10.2.5 编程提示:将赋值操作符用于对象 391
10.2.6 编程实例:BankAccount类(版本1) 391
10.2.7 总结类的一些特徵 395
10.2.8 用于初始化的构造函式 396
10.2.9 编程提示:总是包括一个默认构造函式 401
10.2.10 陷阱:无参数构造函式 402
10.3 抽象数据类型 404
10.3.1 用于生成抽象数据类型的类 404
10.3.2 编程实例:类的另一种实现 407
10.4 继承 411
10.4.1 流类之间的继承关係 411
10.4.2 编程实例:另一个new_line函式 414
10.4.3 函式的默认参数(选读) 414
10.4.4 定义派生类 415
小结 419
自测题答案 419
编程项目 424
第11章 类中的友元函式、重载操作符和数组 429
概述 430
预备知识 430
11.1 友元函式 430
11.1.1 编程实例:一个相等性函式 430
11.1.2 友元函式 432
11.1.3 编程提示:定义取值函式和友元函式 434
11.1.4 编程提示:同时使用成员函式和非成员函式 434
11.1.5 编程实例:Money类(版本1) 435
11.1.6 实现digit_to_int(选读) 440
11.1.7 陷阱:数字常量中的前置零 440
11.1.8 const参数修饰符 441
11.1.9 陷阱:不一致地使用const 443
11.2 重载操作符 446
11.2.1 重载操作符 446
11.2.2 用于自动类型转换的构造函式 449
11.2.3 重载一元操作符 450
11.2.4 重载))和(( 451
11.3 数组和类 458
11.3.1 类数组 458
11.3.2 数组作为类成员 460
11.3.3 编程实例:用于部分填充数组的一个类 461
11.4 类和动态数组 464
11.4.1 编程实例:一个字元串变数类 464
11.4.2 析构函式 466
11.4.3 陷阱:指针作为传值调用参数 468
11.4.4 拷贝构造函式 469
11.4.5 重载赋值操作符 473
小结 476
自测题答案 476
编程项目 482
第12章 独立编译和命名空间 489
概述 490
预备知识 490
12.1 独立编译 490
12.1.1 ADT回顾 490
12.1.2 案例分析:一个独立编译的类DigitalTime 491
12.1.3 使用#ifndef 498
12.1.4 编程提示:定义其他库 500
12.2 命名空间 502
12.2.1 命名空间和using预编译指令 502
12.2.2 创建命名空间 503
12.2.3 限定名称 505
12.2.4 命名空间的微妙之处(选读) 506
12.2.5 无名命名空间 507
12.2.6 编程提示:为命名空间选择一个名称 510
12.2.7 陷阱:混淆全局命名空间和无名命名空间 511
小结 513
自测题答案 513
编程项目 514
第13章 指针和鍊表 517
概述 518
预备知识 518
13.1 节点和鍊表 518
13.1.1 节点 518
13.1.2 鍊表 522
13.1.3 在表头插入一个节点 523
13.1.4 陷阱:丢失节点 525
13.1.5 搜寻鍊表 526
13.1.6 指针作为叠代器 528
13.1.7 在列表中插入和移除节点 529
13.1.8 陷阱:为动态数据结构
使用赋值操作符 531
13.1.9 鍊表的变体 532
13.1.10 由类构成的鍊表 534
13.2 栈和伫列 537
13.2.1 栈 537
13.2.2 编程实例:一个栈类 537
13.2.3 伫列 541
13.2.4 编程实例:一个伫列类 541
小结 545
自测题答案 545
编程项目 547
第14章 递归 551
概述 552
预备知识 552
14.1 面向任务的递归函式 553
14.1.1 案例分析:垂直数字 553
14.1.2 深入递归 558
14.1.3 陷阱:无穷递归 559
14.1.4 用于递归的栈 560
14.1.5 陷阱:栈溢出 561
14.1.6 递归与叠代 561
14.2 面向值的递归函式 563
14.2.1 要返回值的递归函式的常规形式 563
14.2.2 编程实例:另一个Powers函式 563
14.3 递归思想 567
14.3.1 递归设计技术 567
14.3.2 案例分析:二叉搜寻(递归思想示例) 568
14.3.3 编程实例:一个递归成员函式 574
小结 577
自测题答案 577
编程项目 580
第15章 继承 583
概述 584
预备知识 584
15.1 继承基础 584
15.1.1 派生类 585
15.1.2 派生类中的构造函式 590
15.1.3 陷阱:使用来自基类的私有成员变数 592
15.1.4 陷阱:私有成员函式根本不会继承 593
15.1.5 protected限定符 593
15.1.6 重定义成员函式 595
15.1.7 重定义与重载的比较 597
15.1.8 访问重定义的基函式 598
15.2 继承细节 600
15.2.1 不继承的函式 600
15.2.2 派生类中的赋值操作符和拷贝构造函式 600
15.2.3 派生类中的析构函式 601
15.3 多态性 603
15.3.1 晚期绑定 603
15.3.2 C++中的虚函式 604
15.3.3 虚函式和扩展类型兼容性 607
15.3.4 陷阱:切片问题 610
15.3.5 陷阱:不使用虚成员函式 610
15.3.6 陷阱:试图对虚成员函式
定义不齐全的类进行编译 611
15.3.7 编程提示:虚析构函式 611
小结 613
自测题答案 613
编程项目 616
第16章 异常处理 621
概述 622
预备知识 622
16.1 异常处理基础 623
16.1.1 异常处理的一个玩具式
例子 623
16.1.2 定义自己的异常类 629
16.1.3 多个throw和catch 630
16.1.4 陷阱:首先捕捉较具体的异常 632
16.1.5 编程提示:异常类可能微不足道 633
16.1.6 在函式中抛出异常 633
16.1.7 异常规范 634
16.1.8 陷阱:派生类中的异常规范 636
16.2 用于异常处理的编程技术 637
16.2.1 抛出异常的时机 637
16.2.2 陷阱:未捕捉的异常 638
16.2.3 陷阱:嵌套的try-catch块 638
16.2.4 陷阱:滥用异常 638
16.2.5 异常类层次结构 638
16.2.6 测试可用记忆体 639
16.2.7 重新抛出异常 639
小结 640
自测题答案 640
编程项目 641
第17章 模板 643
概述 644
预备知识 644
17.1 用于算法抽象的模板 644
17.1.1 函式模板 645
17.1.2 陷阱:编译器的複杂性 648
17.1.3 编程实例:一个泛化的排序函式 649
17.1.4 编程提示:如何定义模板 652
17.1.5 陷阱:为不恰当的类型使用模板 652
17.2 用于数据抽象的模板 653
17.2.1 类模板的语法 653
17.2.2 编程实例:一个数组类 655
小结 659
自测题答案 659
编程项目 661
第18章 标準模板库 663
概述 664
预备知识 664
18.1 叠代器 664
18.1.1 using声明 665
18.1.2 叠代器的基础知识 665
18.1.3 陷阱:编译器问题 669
18.1.4 叠代器的种类 670
18.1.5 常量和可变叠代器 672
18.1.6 逆向叠代器 673
18.1.7 其他种类的叠代器 675
18.2 容器 676
18.2.1 顺序容器 676
18.2.2 陷阱:叠代器和移除元素 679
18.2.3 编程提示:容器中的类型定义 679
18.2.4 容器配接器stack和queue 679
18.2.5 关联容器set和map 682
18.2.6 效率问题 686
18.3 泛型算法 688
18.3.1 运行时间和大O表示法 688
18.3.2 容器访问运行时间 691
18.3.3 不可修改的序列算法 692
18.3.4 容器修改算法 695
18.3.5 set算法 696
18.3.6 排序算法 697
小结 698
自测题答案 698
编程项目 699
附录1 C++关键字 703
附录2 操作符的优先权 704
附录3 ASCII字元集 705
附录4 部分库函式 706
附录5 内联函式 710
附录6 重载数据索引方括弧 711
附录7 this指针 712
附录8 将操作符重载为成员操作符 714
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net