第10版 C++入门经典


第10版 C++入门经典

文章插图
C++入门经典(第10版)【第10版 C++入门经典】作为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版)
第10版 C++入门经典

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