作 者:董洪伟 著
定 价:79
出 版 社:清华大学出版社
出版日期:2019年08月01日
页 数:0
装 帧:简装
ISBN:9787302527435
"《C++17从入门到精通》针对没有任何编程基础的学生,由浅入深地对C++17标准语法进行了系统讲解。尽量用浅显易懂的例子说明语法概念,力求简明扼要、避免空洞的概念和冗长的描述。提供了游戏编程、信息管理、数据结构、机器学习、人工智能等不同领域的经典实战案例,帮助读者理解语法知识、提高学习兴趣。"
●第1章 C++介绍1.1程序与编程语言1.1.1计算机是什么1.1.2计算机编程1.1.3编译器、解释器和C++语言1.1.4C++语言介绍1.1.5C++程序开发步骤1.2C++程序结构1.2.1最简单的C++程序1.2.2函数1.2.3语句1.2.4程序注释1.2.5hello world程序1.2.6标准输入输出库和cout1.2.7名字空间1.2.8字符串和字符1.2.9运算符和运算数1.2.10宏定义#define1.2.11变量1.2.12标准输入流对象cin1.2.13用户定义类型1.3数和字符的表示1.3.1数的表示1.3.2字符的表示1.4编译、执行C++程序1.5习题第2章变量和类型2.1变量2.1.1变量的定义及初始化2.1.2auto2.1.3typeid运算符2.1.4decltype2.1.5赋值运算符=2.1.6const2.1.7标识符、关键字、文字量2.2数据类型2.2.1基本类型2.2.2sizeof运算符2.2.3文字量2.2.4格式化输出2.2.5类型转换2.2.6类型别名2.2.7枚举2.3局部变量与全局变量、变量的作用域与生命期2.3.1程序块、局部变量和全局变量2.3.2作用域和生命期2.4习题第3章运算符与表达式3.1运算符3.1.1运算符的分类3.1.2优先级和结合性3.2表达式3.3算术运算符3.3.1算术运算符需要注意的几个问题3.3.2自增++和自减--3.3.3数学计算函数库cmath3.4位运算3.5赋值运算符3.6关系运算符3.7逻辑运算符3.8特殊运算符3.8.1条件运算符3.8.2逗号运算符3.9习题第4章语句4.1简单语句、复合语句和控制语句4.1.1简单语句4.1.2复合语句4.1.3控制语句4.2条件语句4.2.1if语句4.2.2switch语句4.2.3if/switch语句中的初始化语句4.3循环语句4.3.1while语句4.3.2for语句4.4跳转语句4.5实战: 控制台游戏——Pong游戏4.5.1Pong游戏4.5.2初始化4.5.3绘制场景4.5.4让球动起来4.5.5事件处理: 用挡板击打球4.6习题第5章复合类型: 数组、指针和引用5.1引用5.2指针5.2.1指针类型5.2.2指针的其他运算5.2.3void*无类型指针5.2.4指针的指针5.2.5指针的引用5.2.6引用和指针的比较5.3数组5.3.1数组和下标运算符5.3.2复杂的数组声明5.3.3C风格字符串5.3.4指针访问数组5.3.5range for5.3.6多维数组5.4动态内存5.4.1程序堆栈区5.4.2new和delete运算符5.4.3动态内存表示多维数组5.5const修饰符5.5.1const和指针5.5.2const对象的引用5.6实战:查找、排序、最短路径5.6.1二分查找5.6.2排序: 冒泡、选择5.6.3Floyd最短路径算法5.7习题第6章函数6.1函数是命名的程序块6.1.1优选公约数6.1.2函数的定义6.2静态变量6.3函数的形参6.3.1参数传递6.3.2默认参数6.3.3数组作为形参6.3.4const与形参6.3.5可变数目的形参6.4递归函数: 调用自身的函数6.4.1递归和递归函数6.4.2实战: 二分查找的递归实现6.4.3实战: 汉诺塔问题6.4.4实战: 快速排序算法6.4.5实战: 迷宫问题6.5函数重载与重载解析6.5.1函数重载6.5.2重载解析6.5.3const对象的引用或指针6.6inline函数6.7constexpr6.8实战: 二维字符图形库ChGL6.8.1如何在字符终端上绘图6.8.2字符图形库ChGL6.8.3曲线绘制API函数plot()6.9实战: 基于ChGL的控制台游戏6.9.1游戏程序的框架6.9.2用ChGL和函数重写Pong游戏6.10实战: 机器学习线性回归6.10.1机器学习6.10.2假设函数、回归和分类6.10.3线性回归6.10.4多变量函数的最小值、正规方程6.10.5梯度下降法6.10.6梯度下降法求解线性回归问题: 模拟数据6.10.7批梯度下降法6.10.8房屋价格预测6.10.9样本特征的规范化6.10.10预测房屋价格6.11习题第7章类和对象7.1面向对象编程7.2类7.2.1定义一个类7.2.2定义类的对象(变量)7.2.3成员函数7.2.4this指针7.2.5类对象的大小7.3构造函数7.3.1创建类对象的构造函数7.3.2初始化成员列表7.3.3拷贝构造函数7.3.4赋值运算符: operator=7.3.5隐式类型转换、explicit7.3.6委托构造函数7.3.7delete7.3.8类对象数组7.3.9类体外定义成员函数和构造函数7.4访问控制和接口7.5const对象、const成员函数、mutable成员变量7.5.1const对象和const成员函数7.5.2重载const7.5.3mutable成员变量7.6析构函数7.7静态成员7.7.1非静态成员变量和静态成员变量7.7.2静态常量7.7.3静态成员函数7.7.4类自身类型的静态成员变量77.9内联成员函数7.10重新定义拷贝构造函数和赋值运算符函数7.11实战: 线性表及应用7.11.1线性表7.11.2线性表的顺序实现: 顺序表7.11.3线性表的链式实现: 链表7.11.4实现一个图书管理的程序7.12实战: 面向对象游戏——基于链表的贪吃蛇游戏7.12.1面向对象游戏引擎7.12.2贪吃蛇游戏7.13习题第8章运算符重载8.1运算符重载的2种方式8.2赋值运算符=8.3下标运算符[]8.4输入输出运算符8.5比较运算符8.6函数调用运算符()8.7类型转换运算符8.8自增和自减运算符8.9可以重载的运算符8.10实战: 矩阵8.11习题第9章派生类9.1继承与派生9.1.1继承关系和派生类9.1.2is a和belong to9.1.3派生类的定义9.1.4成员的隐藏9.1.5继承方式9.1.6基类指针和派生类指针9.2派生类的构造函数和析构函数9.3多继承和虚基类9.3.1多继承9.3.2虚基类9.4多态9.4.1对象的切割和类型转换9.4.2基类指针(引用)和向下类型转换9.4.3虚函数和多态9.4.4虚函数的一些语法规则9.4.5基类指针数组9.4.6虚析构函数9.4.7纯虚函数和抽象类9.5实战: 仿“雷电战机”游戏9.5.1精灵9.5.2游戏引擎GameEngine9.5.3碰撞检测和精灵的销毁9.5.4让敌方战机运动和发射子弹9.6习题第10章模板10.1函数模板10.1.1函数模板的定义与实例化10.1.2模板参数推断10.1.3模板专门化10.1.4函数模板和重载10.1.5模板的返回类型推断10.1.6非类型模板参数10.1.7模板模板参数10.1.8模板参数的默认值10.1.9可变模板参数10.1.10constexpr if10.2类模板10.2.1标准库类模板vector10.2.2类模板Vector10.2.3定义类模板的成员函数10.2.4类模板的模板参数推断10.2.5类模板的专门化10.2.6类模10.2.7类模板std∷initializer_list10.3实战: 强化学习QLearning求解很好路径10.3.1强化学习10.3.2QLearning10.3.3QLearning的C++实现10.4习题第11章移动语义11.1左值和右值11.1.1左值和右值概述11.1.2左值和右值的转换11.1.3左值引用和右值引用11.2移动11.2.1复制和移动11.2.2移动构造函数11.2.3移动赋值运算符函数11.2.4std∷move11.2.5右值引用11.2.6push_back()11.3习题第12章函数指针、函数对象、Lambda表达式12.1函数指针12.1.1函数类型和函数指针类型12.1.2给函数指针类型起别名12.1.3函数指针作为其他函数的参数12.2函数对象12.3Lambda表达式12.3.1定义和使用Lambda表达式12.3.2捕获子句12.3.3返回类型12.3.4Lambda表达式的实质12.4std∷function12.5std∷bind12.6习题第13章C++标准库介绍13.1输入输出流库13.1.1C++的I/O流库13.1.2格式化输入输出13.1.3非格式化输入输出13.1.4文件位置13.1.5流状态13.1.6管理输出缓冲区13.1.7文件输入输出13.1.8字符串流13.2容器13.2.1标准容器13.2.2序列容器13.2.3容器适配器13.2.4关联容器13.3迭代器13.3.1迭代器及其分类13.3.2迭代器适配器13.3.3数组、字符串和迭代器13.4算法13.4.1自定义通用算法13.4.2策略参数13.4.3标准库的常用算法13.5智能指针13.5.1raw指针和智能指针13.5.2unique_ptr 13.5.3shared_ptr13.5.4weak_ptr13.6字符串13.6.1字符: cctype、cwctype13.6.2C风格字符串13.6.3C++的字符串13.7习题第14章异常处理14.1错误和异常处理14.1.1错误的分类14.1.2传统的错误处理方法14.1.3C++的异常处理14.2throw、try、catch14.2.1throw14.2.2try、catch14.2.3异常类型的匹配14.3堆栈展开和RAII14.3.1堆栈展开14.3.2资源获取即初始化14.4习题参考文献
本书以简明扼要的语言、配合丰富的实例,针对初学者从最基础的变量、表达式、数组、指针、引用和函数等,到面向对象的类和对象、继承与派生、虚函数与多态,从泛型编程的函数模板和类模板到移动语义、头等函数(函数指针、函数对象、Lambda表达式),从C++标准库的输入输出流库、容器、迭代器、算法、智能指针等工具到异常处理和RAII等,由浅入深地对近期新的C++17标准语法进行了系统的讲解。对一些关键的语法概念如函数、类与对象、派生类等内容,提供了游戏编程、信息管理、数据结构、机器学习、人工智能等学科领域的一些经典的、实际问题的实战演练,以加强读者将语法知识用于解决各种实际问题和进行实际编程能力的训练,让读者领悟和体会C++语言的灵活运用。本书描述精炼、简单易懂,并有丰富的实战案例,既适合作为编程初学者的学习用书,也适合有编程基础的开发人员迅速学习和掌握现代C++语言。
C++编程语言以其具有“可操纵底层硬件”“程序效率高”和“面向对象”的优势被广泛应用于系统软件和应用软件的开发,不但是企业界开发重量级软件或平台的优选语言,也是国内外高校广泛采用的计算机编程教学语言,更是衡量一个程序员功力的标尺。然而,尽管企业界早已使用C++11/14/17标准,但国内高校仍然延用的是传统的、过时的C++98标准,已经和业界普遍使用的现代C++语法标准有很大的脱节。目前市场上还未见到国内作者编写的现代C++语言教材,虽然有少量国外作者编写的现代C++语言教材,但国外作者的思维模式和语言文化差异使得这些书难以被国内读者,特别是初学者阅读理解,这些书往往都是大部头的著作,令人望而生畏。由于C++语言本身语法的复杂,琐碎的语法讲解使初学者感到枯燥乏味; 缺少实践性的例子,初学者很难理解这些语法知识的价值和适用场景,不知如何将这些语法知识应用于实际编程中。这就造成了许等