封面
版权信息
内容简介
作者简介
前言
第1部分 C/C++语言概述
第1章 C/C++语言
1.1 C和C++语言的起源、特点、关系与讲解范畴
1.2 C/C++语言的市场需求与就业需求分析
1.3 再谈C/C++就业
1.4 搭建语言开发环境
第2部分 C语言
第2章 数据类型、运算符与表达式
2.1 常量、变量、整型、实型和字符型
2.1.1 如何创建最基本的能运行的C程序
2.1.2 C语言的数据类型
2.1.3 常量和变量
2.1.4 整型数据
2.1.5 实型数据
2.1.6 字符型数据
2.1.7 字符串变量
2.1.8 变量赋初值
2.1.9 数值型数据之间的混合运算
2.2 算术运算符和表达式
2.2.1 C语言的运算符
2.2.2 算术运算符和算术表达式
2.2.3 运算符优先级问题
2.2.4 强制类型转换运算符
2.2.5 自增和自减运算符
2.3 赋值运算符和逗号运算符
2.3.1 赋值运算符和赋值表达式
2.3.2 逗号运算符和逗号表达式
第3章 程序的基本结构和语句
3.1 C语言的语句和程序的基本结构
3.1.1 语句的分类
3.1.2 程序的三种基本结构
3.1.3 赋值语句的特殊写法
3.2 数据的输出与数据的输入
3.2.1 数据的输出
3.2.2 数据的输入
第4章 逻辑运算和判断选择
4.1 关系运算符、关系表达式与逻辑运算符、逻辑表达式
4.1.1 关系运算符和关系表达式
4.1.2 逻辑运算符和逻辑表达式
4.2 if语句详解
4.2.1 if语句的三种形式
4.2.2 if语句的嵌套
4.3 条件运算符和switch语句
4.3.1 条件运算符
4.3.2 switch语句
第5章 循环控制
5.1 循环控制语句简介与goto、while、do…while语句精解
5.1.1 循环控制语句简介
5.1.2 goto语句
5.1.3 while语句
5.1.4 do…while语句
5.2 for语句精解
5.2.1 for语句的一般形式
5.2.2 for语句的主要说明
5.3 循环的嵌套、比较与break语句、continue语句
5.3.1 循环的嵌套
5.3.2 几种循环语句的比较
5.3.3 break语句和continue语句
第6章 数组
6.1 一维数组
6.1.1 一维数组的一般形式
6.1.2 一维数组元素的引用
6.1.3 一维数组的初始化
6.2 二维数组
6.2.1 二维数组的一般形式
6.2.2 二维数组元素的引用
6.2.3 二维数组的初始化
6.3 字符数组
6.3.1 字符数组的定义
6.3.2 字符数组的初始化
6.3.3 字符串和字符串结束标记
6.3.4 字符数组的输入/输出
6.3.5 字符串处理函数
第7章 函数
7.1 函数的基本概念和定义
7.1.1 函数的基本概念
7.1.2 函数的定义和返回值
7.2 函数调用方式和嵌套调用
7.2.1 函数调用的一般形式
7.2.2 函数调用的方式
7.2.3 函数的嵌套调用
7.3 函数递归调用精彩演绎
7.3.1 函数递归调用的定义
7.3.2 递归调用的出口
7.3.3 递归的优缺点及是否必须用递归
7.3.4 递归的实际运用简介
7.4 数组作为函数参数
7.4.1 数组元素作为函数实参
7.4.2 数组名作为函数实参
7.4.3 用多维数组作为函数实参
7.5 局部变量和全局变量
7.5.1 局部变量
7.5.2 全局变量
7.6 变量的存储和引用与内部和外部函数
7.6.1 变量的存储类别
7.6.2 局部变量的存储方式
7.6.3 全局变量跨文件引用
7.6.4 函数的跨文件调用
7.6.5 static关键字用法总结
第8章 编译预处理
8.1 宏定义
8.1.1 不带参数的宏定义
8.1.2 带参数的宏定义
8.2 文件包含和条件编译
8.2.1 文件包含
8.2.2 条件编译
第9章 指针
9.1 指针的基本概念详解
9.1.1 前提知识
9.1.2 地址的概念
9.1.3 直接访问和间接访问
9.2 变量的指针和指向变量的指针变量
9.2.1 指针变量的定义
9.2.2 指针变量的引用
9.2.3 指针变量作为函数参数
9.3 数组的指针和指向数组的指针变量
9.3.1 指向数组元素的指针变量的定义和赋值
9.3.2 通过指针引用数组元素
9.3.3 数组名作为函数参数
9.3.4 回顾二维数组和多维数组的概念
9.3.5 指向多维数组的指针和指针变量探究
9.3.6 指针数组和数组指针
9.3.7 多维数组的指针作为函数参数
9.4 字符串的指针和指向字符串的指针变量
9.4.1 字符串表示形式
9.4.2 字符串指针作为函数参数
9.4.3 字符指针变量与字符数组
9.5 函数指针和返回指针值的函数
9.5.1 用函数指针变量调用函数
9.5.2 把指向函数的指针变量作为函数参数
9.5.3 返回指针值的函数
9.6 指针数组、指针的指针与main函数参数
9.6.1 指针数组概念回顾
9.6.2 指向指针的指针
9.6.3 指针数组作为main函数参数
9.7 本章小结
第10章 结构体与共用体
10.1 结构体变量定义、引用与初始化
10.1.1 结构体简介
10.1.2 定义结构体类型变量的方法
10.1.3 结构体类型变量的引用
10.1.4 结构体变量的初始化
10.2 结构体数组与结构体指针
10.2.1 结构体数组
10.2.2 结构体指针
10.2.3 用指向结构体的指针作为函数参数
10.3 共用体、枚举类型与typedef
10.3.1 共用体
10.3.2 枚举类型
10.3.3 用typedef定义类型
第11章 位运算
11.1 位的概念和位运算符简介
11.1.1 位的概念
11.1.2 位运算符简介
11.2 位运算的具体应用
第12章 文 件
12.1 文件简介及文本、二进制文件区别
12.1.1 文件简介
12.1.2 文本文件和二进制文件区别详细解释
12.2 文件的打开、关闭、读写与实战操练
12.2.1 文件的打开
12.2.2 文件的关闭
12.2.3 文件的读写
12.2.4 文件读写实战操练
12.3 将结构体写入二进制文件再读出
12.3.1 将结构体写入二进制文件
12.3.2 从二进制文件中读出结构体数据
12.3.3 文件使用方式中"rb"和"r"、"wb"和"w"的区别
第3部分 C++语言
第13章 C++基本语言
13.1 语言特性、工程构成与可移植性
13.1.1 语言特性:过程式、对象式程序设计
13.1.2 C++程序和项目文件构成谈
13.1.3 编译型语言概念与可移植性问题
13.2 命名空间简介与基本输入/输出精解
13.2.1 命名空间简介
13.2.2 基本输入/输出
13.3 auto、头文件防卫、引用与常量
13.3.1 局部变量和初始化
13.3.2 auto关键字简介
13.3.3 头文件防卫式声明
13.3.4 引用
13.3.5 常量
13.4 范围for、new内存动态分配与nullptr
13.4.1 范围for语句
13.4.2 动态内存分配问题
13.4.3 nullptr
13.5 结构、权限修饰符与类简介
13.5.1 结构回顾
13.5.2 public和private权限修饰符
13.5.3 类简介
13.5.4 类的组织
13.6 函数新特性、inline内联函数与const详解
13.6.1 函数回顾与后置返回类型
13.6.2 inline内联函数
13.6.3 函数特殊写法总结
13.6.4 constchar *、charconst *与char*const三者的区别
13.6.5 函数形参中带const
13.7 string类型
13.7.1 总述
13.7.2 string类型简介
13.7.3 定义和初始化string对象
13.7.4 string对象上的常用操作
13.8 vector类型
13.8.1 vector类型简介
13.8.2 定义和初始化vector对象
13.8.3 vector对象上的操作
13.9 迭代器精彩演绎、失效分析及弥补、实战
13.9.1 迭代器简介
13.9.2 容器的迭代器类型
13.9.3 迭代器begin/end、反向迭代器rbegin/rend操作
13.9.4 迭代器运算符
13.9.5 const_iterator迭代器
13.9.6 迭代器失效
13.9.7 范例演示
13.10 类型转换:static_cast、reinterpret_cast等
13.10.1 隐式类型转换
13.10.2 显式类型转换(强制类型转换)
13.10.3 总结
第14章 类
14.1 成员函数、对象复制与私有成员
14.1.1 总述
14.1.2 类基础
14.1.3 成员函数
14.1.4 对象的复制
14.1.5 私有成员
14.2 构造函数详解、explicit与初始化列表
14.2.1 称呼上的统一
14.2.2 构造函数
14.2.3 多个构造函数
14.2.4 函数默认参数
14.2.5 隐式转换和explicit
14.2.6 构造函数初始化列表
14.3 inline、const、mutable、this与static
14.3.1 在类定义中实现成员函数inline
14.3.2 成员函数末尾的const
14.3.3 mutable
14.3.4 返回自身对象的引用——this
14.3.5 static成员
14.4 类内初始化、默认构造函数、“=default;”和“=delete;”
14.4.1 类相关非成员函数
14.4.2 类内初始值
14.4.3 const成员变量的初始化
14.4.4 默认构造函数
14.4.5 “=default;”和“=delete;”
14.5 拷贝构造函数
14.6 重载运算符、拷贝赋值运算符与析构函数
14.6.1 重载运算符
14.6.2 拷贝赋值运算符(赋值运算符)
14.6.3 析构函数(释放函数)
14.6.4 几个话题
14.7 子类、调用顺序、访问等级与函数遮蔽
14.7.1 子类概念
14.7.2 子类对象定义时调用构造函数的顺序
14.7.3 访问等级(public、protected与private)
14.7.4 函数遮蔽
14.8 父类指针、虚/纯虚函数、多态性与析构函数
14.8.1 父类指针与子类指针
14.8.2 虚函数
14.8.3 多态性
14.8.4 纯虚函数与抽象类
14.8.5 父类的析构函数一般写成虚函数
14.9 友元函数、友元类与友元成员函数
14.9.1 友元函数
14.9.2 友元类
14.9.3 友元成员函数
14.10 RTTI、dynamic_cast、typeid、type-info与虚函数表
14.10.1 RTTI是什么
14.10.2 dynamic_cast运算符
14.10.3 typeid运算符
14.10.4 type_info类
14.10.5 RTTI与虚函数表
14.1 1 基类与派生类关系的详细再探讨
14.11.1 派生类对象模型简介
14.11.2 派生类构造函数
14.11.3 既当父类又当子类
14.11.4 不想当基类的类
14.11.5 静态类型与动态类型
14.11.6 派生类向基类的隐式类型转换
14.11.7 父类、子类之间的复制与赋值
14.12 左值、右值、左值引用、右值引用与move
14.12.1 左值和右值
14.12.2 引用分类
14.12.3 左值引用
14.12.4 右值引用
14.12.5 std::move函数
14.12.6 左值、右值总结说明
14.13 临时对象深入探讨、解析与提高性能手段
14.13.1 临时对象的概念
14.13.2 产生临时对象的情况和解决方案
14.14 对象移动、移动构造函数与移动赋值运算符
14.14.1 对象移动的概念
14.14.2 移动构造函数和移动赋值运算符概念
14.14.3 移动构造函数演示
14.14.4 移动赋值运算符演示
14.14.5 合成的移动操作
14.14.6 总结
14.15 继承的构造函数、多重继承、类型转换与虚继承
14.15.1 继承的构造函数
14.15.2 多重继承
14.15.3 类型转换
14.15.4 虚基类与虚继承(虚派生)
14.16 类型转换构造函数、运算符与类成员指针
14.16.1 类型转换构造函数
14.16.2 类型转换运算符(类型转换函数)
14.16.3 类型转换的二义性问题
14.16.4 类成员函数指针
14.16.5 类成员变量指针
第15章 模板与泛型
15.1 模板概念与函数模板的定义、调用
15.1.1 模板概念
15.1.2 函数模板的定义
15.1.3 函数模板的调用
15.1.4 非类型模板参数
15.2 类模板概念与类模板的定义、使用
15.2.1 类模板概念
15.2.2 类模板的定义
15.2.3 类模板的成员函数
15.2.4 类模板名字的使用
15.2.5 非类型模板参数的使用
15.3 使用typename的场合、函数模板、默认模板参数与趣味写法分析
15.3.1 typename的使用场合
15.3.2 函数指针作为其他函数的参数
15.3.3 函数模板趣味用法举例
15.3.4 默认模板参数
15.4 成员函数模板,模板显式实例化与声明
15.4.1 普通类的成员函数模板
15.4.2 类模板的成员函数模板
15.4.3 模板显式实例化与声明
15.5 using定义模板别名与显式指定模板参数
15.5.1 using定义模板别名
15.5.2 显式指定模板参数
15.6 模板全特化与偏特化(局部特化)
15.6.1 类模板特化
15.6.2 函数模板特化
15.6.3 模板特化版本放置位置建议
15.7 可变参模板与模板模板参数
15.7.1 可变参函数模板
15.7.2 可变参类模板
15.7.3 模板模板参数
第16章 智能指针
16.1 直接内存管理(new/delete)、创建新工程与观察内存泄漏
16.1.1 直接内存管理(new/delete)
16.1.2 创建新工程与观察内存泄漏
16.2 new/delete探秘、智能指针总述与shared_ptr基础
16.2.1 new/delete探秘
16.2.2 智能指针总述
16.2.3 shared_ptr基础
16.3 shared_ptr常用操作、计数与自定义删除器等
16.3.1 shared_ptr引用计数的增加和减少
16.3.2 shared_ptr指针常用操作
16.4 weak_ptr简介、weak_ptr常用操作与尺寸问题
16.4.1 weak_ptr简介
16.4.2 weak_ptr常用操作
16.4.3 尺寸问题
16.5 shared_ptr使用场景、陷阱、性能分析与使用建议
16.5.1 std::shared_ptr使用场景
16.5.2 std::shared_ptr使用陷阱分析
16.5.3 性能说明
16.5.4 补充说明和使用建议
16.6 unique_ptr简介与常用操作
16.6.1 unique_ptr简介
16.6.2 unique_ptr常用操作
16.7 返回unique_ptr、删除器与尺寸问题
16.7.1 返回unique_ptr
16.7.2 删除器
16.7.3 尺寸问题
16.8 智能指针总结
第17章 并发与多线程
17.1 基本概念和实现
17.1.1 并发、进程、线程的基本概念和综述
17.1.2 并发的实现方法
17.1.3 C++11新标准线程库
17.2 线程启动、结束与创建线程写法
17.2.1 范例演示线程运行的开始和结束
17.2.2 其他创建线程的写法
17.3 线程传参详解、detach坑与成员函数作为线程函数
17.3.1 传递临时对象作为线程参数
17.3.2 临时对象作为线程参数继续讲
17.3.3 传递类对象与智能指针作为线程参数
17.3.4 用成员函数作为线程入口函数
17.4 创建多个线程、数据共享问题分析与案例代码
17.4.1 创建和等待多个线程
17.4.2 数据共享问题分析
17.4.3 共享数据的保护实战范例
17.5 互斥量的概念、用法、死锁演示与解决详解
17.5.1 互斥量的基本概念
17.5.2 互斥量的用法
17.5.3 死锁
17.6 unique_lock详解
17.6.1 unique_lock取代lock_guard
17.6.2 unique_lock的第二个参数
17.6.3 unique_lock的成员函数
17.6.4 unique_lock所有权的传递
17.7 单例设计模式共享数据分析、解决与call_once
17.7.1 设计模式简单谈
17.7.2 单例设计模式
17.7.3 单例设计模式共享数据问题分析、解决
17.7.4 std::call_once
17.8 condition_variable、wait、notify_one与notify_all
17.8.1 条件变量std::condition_variable、wait与notify_one
17.8.2 上述代码深入思考
17.8.3 notify_all
17.9 async、future、packaged_task与promise
17.9.1 std::async和std::future创建后台任务并返回值
17.9.2 std::packaged_task
17.9.3 std::promise
17.9.4 小结
17.10 future其他成员函数、shared_future与atomic
17.10.1 std::future的其他成员函数
17.10.2 续谈std::async的不确定性问题
17.10.3 std::shared_future
17.10.4 原子操作std::atomic
17.11 Windows临界区与其他各种mutex互斥量
17.11.1 Windows临界区
17.11.2 多次进入临界区试验
17.11.3 自动析构技术
17.11.4 recursive_mutex递归的独占互斥量
17.11.5 带超时的互斥量std::timed_mutex和std::recursive_timed_mutex
17.12 补充知识、线程池浅谈、数量谈与总结
17.12.1 知识点补充
17.12.2 浅谈线程池
17.12.3 线程创建数量谈
17.12.4 C++11多线程总结
第18章 内存高级话题
18.1 new、delete的进一步认识
18.1.1 总述与回顾
18.1.2 从new说起
18.2 new内存分配细节探秘与重载类内operator new、delete
18.2.1 new内存分配细节探秘
18.2.2 重载类中的operator new和operator delete操作符
18.2.3 重载类中的operator new[]和operator delete[]操作符
18.3 内存池概念、代码实现和详细分析
18.3.1 内存池的概念和实现原理简介
18.3.2 针对一个类的内存池实现演示代码
18.3.3 内存池代码后续说明
18.4 嵌入式指针概念及范例、内存池改进版
18.4.1 嵌入式指针
18.4.2 内存池代码的改进
18.5 重载全局new/delete、定位new及重载
18.5.1 重载全局operator new和operator delete操作符
18.5.2 定位new(placementnew)
18.5.3 多种版本的operator new重载
第19章 STL标准模板库大局观
19.1 STL总述、发展史、组成与数据结构谈
19.1.1 几个概念与推荐书籍
19.1.2 算法和数据结构谈
19.1.3 STL发展史和各个版本
19.1.4 标准库的使用说明
19.1.5 STL的组成部分
19.2 容器分类与array、vector容器精解
19.2.1 容器的分类
19.2.2 容器的说明和简单应用
19.3 容器的说明和简单应用例续
19.3.1 deque和stack
19.3.2 queue
19.3.3 list
19.3.4 其他
19.4 分配器简介、使用与工作原理说
19.4.1 分配器简介
19.4.2 分配器的使用
19.4.3 其他的分配器与原理说
19.4.4 自定义分配器
19.5 迭代器的概念和分类
19.5.1 迭代器基本概念
19.5.2 迭代器的分类
19.6 算法简介、内部处理与使用范例
19.6.1 算法简介
19.6.2 算法内部一些处理
19.6.3 一些典型算法使用范例
19.7 函数对象回顾、系统函数对象与范例
19.7.1 函数对象/仿函数回顾
19.7.2 标准库中定义的函数对象
19.7.3 标准库中定义的函数对象范例
19.8 适配器概念、分类、范例与总结
19.8.1 适配器基本概念
19.8.2 容器适配器
19.8.3 算法适配器
19.8.4 迭代器适配器
19.8.5 总结
第20章 高级话题与新标准
20.1 函数调用运算符与function类模板
20.1.1 学习C++的体会
20.1.2 函数调用运算符
20.1.3 不同调用对象的相同调用形式
20.1.4 标准库function类型简介
20.1.5 总结
20.2 万能引用
20.2.1 类型区别基本概念
20.2.2 universal reference基本认识
20.2.3 万能引用资格的剥夺与辨认
20.3 理解函数模板类型推断与查看类型推断结果
20.3.1 如何查看类型推断结果
20.3.2 理解函数模板类型推断
20.4 引用折叠、转发、完美转发与forward
20.4.1 引用折叠规则
20.4.2 转发与完美转发
20.4.3 std::forward
20.4.4 std::move和std::forward的区别
20.4.5 再谈万能引用
20.5 理解auto类型推断与auto应用场合
20.5.1 auto类型常规推断
20.5.2 auto类型针对数组和函数的推断
20.5.3 auto类型std::initializer_list的特殊推断
20.5.4 auto不适用场合举例
20.5.5 auto适用场合举例
20.6 详解decltype含义与decltype主要用途
20.6.1 decltype含义和举例
20.6.2 decltype主要用途
20.6.3 总结
20.7 可调用对象、std::function与std::bind
20.7.1 可调用对象
20.7.2 std::function可调用对象包装器
20.7.3 std::bind绑定器
20.7.4 总结
20.8 lambda表达式与for_each、find_if简介
20.8.1 用法简介
20.8.2 捕获列表
20.8.3 lambda表达式延迟调用易出错细节分析
20.8.4 lambda表达式中的mutable
20.8.5 lambda表达式的类型和存储
20.8.6 lambda表达式再演示和优点总结
20.9 lambda表达式捕获模式的陷阱分析和展示
20.9.1 捕获列表中的&
20.9.2 形参列表可以使用auto
20.9.3 成员变量的捕获问题
20.9.4 广义lambda捕获
20.9.5 静态局部变量
20.10 可变参数函数、initializer_list与省略号形参
20.10.1 可变参数函数
20.10.2 initializer_list(初始化列表)
20.10.3 省略号形参
20.11 萃取技术概念与范例等
20.11.1 类型萃取简介
20.11.2 类型萃取范例
20.11.3 迭代器萃取简介
20.11.4 总结
后记 IT职业发展的未来之路
更新时间:2022-07-27 19:11:32