现代C++编程实战
现代C++编程实战
从入门到应用
关于本书
现代 C++ 编程实战:从入门到应用》 旨在帮助读者掌握 C++ 的最新特性,并通过实践案例提升编程能力。本书不同于传统 C++ 教材,直接基于 C++11 及更新的标准,避免过时语法,注重实用性。
适合人群
- C++ 初学者,希望从现代 C++ 入门,不受过时语法困扰
- 有编程经验的开发者,想高效掌握 C++11 及更新特性
- 关注性能优化、系统编程、游戏开发的工程师
书籍特色
✅ 聚焦现代 C++:直接讲解 C++11 - C++23 特性,简化学习路径
✅ 简洁易懂:避免冗长理论,结合直观示例,快速上手
✅ 实战驱动:涵盖游戏开发、数据结构、AI 编程等真实案例
✅ 行业导向:关注 C++ 在高性能计算、嵌入式、金融等领域的应用
无论你是初学者,还是希望提升 C++ 技能的开发者,本书都将帮助你掌握现代 C++,并在实际项目中灵活运用。
Team Discounts
Get a team discount on this book!
目录
- 前言
- 第1章: C++介绍
- 1.1 程序与编程语言
- 1.2 C++ 程序结构
- 1.2.1 最简单的 C++ 程序
- 1.2.2 函数
- 1.2.3 语句
- 1.2.4 程序注释
- 1.2.5 Hello World 程序
- 1.2.6 标准输入输出库和cout
- 1.2.7 名字空间
- 1.2.8 字符串和字符
- 1.2.9 运算符与操作数
- 1.2.10 宏定义 #define
- 1.2.11 变量:命名的内存块
- 1.2.12 标准输入流对象 cin
- 1.2.13 用户定义类型
- 1.3 数和字符的表示
- 1.4 编译与执行 C++ 程序
- 习题
- 实验
- 第2章: 变量和类型
- 2.1 变量
- 2.1.1 变量的定义与初始化
- 2.1.2 auto 类型推断
- 2.1.3 typeid 运算符
- 2.1.4 const
- 2.1.5 decltype 类型推导
- 2.1.6 decltype(auto)
- 2.1.7 赋值运算符 =
- 2.1.8 标识符、关键字和字面量
- 2.2 数据类型
- 2.2.1 基本类型的分类
- 2.2.2 整数类型
- 2.2.3 字符类型(Unicode 相关)
- 2.2.4 浮点类型
- 2.2.5 void类型
- 2.2.6 bool 类型
- 2.2.7 sizeof 运算符
- 2.3 字面量
- 2.3.1. 整型字面量
- 2.3.2 浮点型字面量
- 2.3.3 字符字面量和字符串字面量
- 2.3.4 布尔字面量(Boolean Literals)
- 2.3.5 空指针字面量(Null Pointer Literal)
- 2.3.6 类型推导与字面量
- 2.3.7 C++20及以后的新特性
- 2.4 格式化输出
- 2.5 类型转换
- 2.6 类型别名
- 2.7 枚举类型
- 2.8 局部变量与全局变量、变量的作用域与生命期
- 习题
- 实验
- 第3章: 运算符
- 第4章: 语句
- 4.1 简单语句、复合语句和控制语句
- 4.2 条件语句
- 4.3 循环语句
- 4.3.1 while语句
- 4.3.2 break 语句
- 4.3.3 do-while语句
- 4.3.4 continue语句
- 4.3.5 for语句
- 4.3.6 范围 for 循环 (Range-based for loop)
- 4.4 跳转语句
- 4.5 项目实战: 猜数字游戏
- 4.6 项目实战: 控制台Pong游戏
- 习题
- 实验
- 第5章 复合类型:数组、指针和引用
- 5.1 引用 (References)
- 5.2. 指针 (Pointers)
- 5.2.1 指针类型 (Pointer Types)
- 空指针 (Null Pointers)
- 5.2.2 指针的其他运算
- 5.2.3 void* (无类型指针)
- 5.2.4 指针的指针
- 5.2.5 指针的引用
- 5.2.6 引用和指针的比较
- 5.3 数组
- 5.3.1. 数组的定义
- 5.3.2 下标运算符 [] 访问数组元素
- 5.3.3 数组相关限制与注意事项
- 5.3.4 复杂的数组声明
- 5.3.4 C风格字符串
- 5.3.5 指针访问数组
- 5.3.6 Range-based for 访问数组元素
- 5.3.7 多维数组
- 5.4 const 与指针、引用的结合
- 5.5 内存管理:栈与动态内存分配
- 5.6 实战:查找、排序
- 5.7 实战项目:学生成绩管理系统
- 习题
- 实验
- 第 6 章:函数
- 6.1 函数是命名的程序块
- 6.2 函数声明与定义
- 6.2.1 函数声明
- 6.2.2 函数定义
- 6.2.3 函数签名(Function Signature)
- 6.2.4 函数声明与定义的关系
- 6.2.5 函数声明与定义分开的实际应用:一个简单的工程项目示例
- 6.3 函数参数
- 6.4 返回值
- 6.4.1 返回值类型
- 6.4.2 返回语句的语法
- 6.4.3 返回值的类型转换
- 6.4.4 返回引用
- 6.4.5 返回指针
- 6.4.6 返回 const 值、const对象的引用和指针、const指针
- 6.4.7 返回值优化
- 总结
- 6.5 静态变量
- 6.6 函数重载
- 6.7 内联函数
- 6.7.1 什么是内联函数?
- 6.7.2 内联函数的工作原理
- 6.7.3 为什么使用内联函数?
- 6.7.4 内联函数的使用场景
- 6.7.5 注意事项与限制
- 6.7.6 内联函数与宏的比较
- 6.7.7 总结
- 6.8 constexpr 关键字
- 6.8.1 constexpr 变量
- 6.8.2 constexpr 函数
- 6.8.3 扩展:C++20 consteval 和 constinit)
- 6.8.4 constexpr、consteval、constinit 的优缺点与使用场景
- 6.9 递归函数:调用自身的函数
- 6.9.1 递归和递归函数
- 6.9.2 阶乘的递归函数
- 6.9.3 递归函数的基本结构
- 6.9.4 斐波那契数列
- 6.9.5 最大公约数
- 6.9.6 汉诺塔问题
- 6.9.7 快速排序算法
- 6.9.8 迷宫问题
- 6.9.9 小结
- 6.10 函数指针
- 6.10.1 计算器函数calculate
- 6.10.2 函数指针的定义和初始化
- 函数指针的初始化
- 6.10.3 通过函数指针调用函数
- 6.10.4 函数指针作为函数参数
- 6.10.5 函数指针数组
- 6.10.6 小结
- 6.11 Lambda 表达式
- 6.11.1 为什么需要 Lambda 表达式?
- 6.11.2 Lambda 表达式的基本形式和语法
- 6.11.3 Lambda 表达式的赋值
- 6.11.4 Lambda 表达式的参数和返回值
- 6.11.4 捕获外部变量
- 6.11.5 可变 Lambda(mutable)
- 6.11.6 初始化捕获(init capture)
- 6.11.7 Lambda 表达式的应用场景
- 6.11.8 小结
- 6.12 实战:二维字符图形库 ChGL
- 6.13 实战:基于ChGL的控制台游戏
- 习题
- 第7章: 函数模板
- 7.1 为什么需要函数模板?
- 7.2 函数模板的定义与实例化
- 7.3 显式指定模板参数与自动推断模板参数
- 7.4 非类型模板参数
- 7.5 模板模板参数
- 7.6 模板参数的默认值
- 7.7 返回类型推断
- 7.8 函数模板与重载
- 7.9 模板专门化
- 7.10 可变模板参数
- 7.10.1. 什么是可变模板参数?
- 7.10.2 参数包展开(Parameter Pack Expansion)
- 7.10.3 折叠表达式(Fold Expression)
- 特点:
- 7.10.3 递归模板处理
- 7.10.3 参数包展开、折叠表达式和递归模板处理的比较
- 7.10.5 编译期平方表生成器
- 习题
- 第8章: 类与对象
- 8.1 过程式编程:智能家居系统
- 8.2 面向对象编程:智能家居系统案例
- 8.3 类与对象:面向对象编程的基础
- 8.3.1 类的定义
- 8.3.2 定义类的对象(变量)
- 8.3.3 成员访问运算符 .
- 8.3.4 间接访问运算符->
- 8.3.5 stuct和class区别
- 8.3.6 添加成员函数:让对象拥有行为
- 8.3.7 this 指针
- 8.3.8 类对象的大小
- 8.4 构造函数
- 8.4.1 什么是构造函数?
- 8.4.2 初始化成员列表
- 8.4.3 初始化成员列表 vs 类内成员初始化器
- 8.4.4 拷贝构造函数
- 8.4.5 赋值运算符:operator=
- 8.4.6 深拷贝与浅拷贝
- 8.4.7 delete
- 8.4.8 隐式类型转换、explicit
- 8.4.9 类对象数组
- 8.4.10 委托构造函数
- 8.4.11 类体外定义成员函数和构造函数
- 8.4.12 头文件与源文件的分离
- 8.5 访问控制和接口
- 8.6 友元
- 8.7 const 对象、const 成员函数和 mutable 成员变量
- 8.8 析构函数
- 8.9 内联成员函数 (Inline Member Functions)
- 8.10 静态成员 (Static Members)
- 8.11 实战:线性表及应用
- 8.12 面向对象的控制台字符图形库ChGL
- 8.13 实战:面向对象游戏:基于链表的贪吃蛇游戏
- 8.14 总结
- 习题
- 第9章: 运算符重载
- 9.1 运算符重载的两种方式
- 9.2 运算符作为成员函数和外部函数重载的主要区别
- 9.3 赋值运算符=
- 9.4 下标运算符[]
- 9.5 输入输出运算符
- 9.6 比较运算符和<=> 运算符
- 9.6.1 作为成员函数的比较运算符
- 9.6.2 作为外部函数的比较运算符
- 9.6.3 重载其他比较运算符
- 9.6.4 <=> 运算符
- 9.6.5 C++20 中 <=> 和 == 的详细规则:
- 9.9.6 <=> 运算符的三种返回类型
- 9.7 函数调用运算符 ()
- 9.8 类型转换运算符
- 9.9 自增和自减运算符
- 9.10 可以重载的运算符
- 9.11 实战:矩阵
- 习题
- 第10章:继承与派生
- 10.1 继承与派生概述
- 10.2 类之间的关系:is-a 与 has-a
- 10.3 派生类的定义
- 10.4 成员的隐藏(Hide)
- 10.5 继承方式与访问控制
- 10.6 对象切割
- 10.7 向上类型转换与向下类型转换
- 10.8 派生类的构造函数、析构函数与拷贝构造函数
- 10.9 虚函数与多态
- 10.9.1 虚函数概述
- 10.9.2 虚函数的基本示例
- 10.9.3 虚函数的工作原理
- 10.9.4 虚析构函数:
- 10.9.5 编译时多态 vs 运行时多态
- 10.9.6 类型转换与 dynamic_cast
- 10.9.7 虚函数的一些语法规则
- 10.9.8 总结
- 10.10 多继承和虚基类
- 10.11 纯虚函数与抽象类
- 10.12 实战项目:公司员工管理系统
- 10.13 实战:仿``雷电战机''游戏
- 习题
- 实验
- 第11章: 类模板
- 第12章: 错误处理与异常处理
- 12.1 引言
- 12.2 传统错误处理机制
- 12.3 异常处理机制
- 12.4 异常处理的高级主题
- 12.5 异常安全与 RAII
- 12.5.1 异常安全级别
- 12.5.2 RAII(资源获取即初始化)
- 12.7 多线程中的异常处理
- 12.8 最佳实践与总结
- 12.8.1 异常处理的最佳实践
- 12.8.2 传统错误处理 vs. 异常处理
- 12.8.3 何时使用异常,何时使用错误码?
- 12.6 总结
- 习题
- 第13章: 移动语义
- 第14章: 内存管理
- 14.1. 手动内存管理的风险
- 14.2 RAII(资源获取即初始化)思想
- 14.3 智能指针
- 14.4 自定义删除器(Deleter)
- 14.5. 低级内存管理
- 14.6 自定义内存分配器与重载 operator new 和 operator delete
- 14.6.1 重载 operator new 和 operator delete 的意义
- 14.6.2 重载 operator new 和 operator delete 的基本方式
- 14.6.3. 重载 operator new 和 operator delete 的实际意义
- 14.6.4. 总结
- 14.7 本章总结
- 习题
- 第15章: C++标准库介绍
- 15.1 输入输出流库
- 15.1.1 C++的IO流库
- 15.1.2 格式化输入输出
- 15.1.3 非格式化输入输出
- 15.1.4 文件位置
- 15.1.5 流状态
- 15.1.6 管理输出缓冲区
- 15.1.7 文件输入输出
- 15.1.8 字符串流(String Streams)
- 15.2 容器
- 15.2.1 标准容器
- 15.2.2 序列容器(Sequence containers)
- 15.2.3 容器适配器(Container Adapters)
- 15.2.4 关联容器 (Associative Containers)
- 15.3 迭代器
- 15.4 算法
- 15.5 字符串
- 15.6 多线程与并发(Threading and Concurrency)
- 15.7 正则表达式(Regular Expressions)
- 15.7.1. 什么是正则表达式?
- 15.7.2. C++ 正则表达式基础
- 15.7.3. 进阶匹配:查找和提取
- 15.7.4. 替换文本:std::regex_replace
- 15.7.5. 正则表达式常见模式
- 15.7.6. 总结
- 15.8 内存管理(Memory Management)
- 15.8.1 引言:现代 C++ 的内存管理理念
- 15.8.2 RAII(资源获取即初始化)
- 15.8.3 智能指针:自动管理动态内存
- 15.8.4 低级内存管理工具
- 15.8.5 并发环境下的内存管理
- 15.8.6 总结
- 习题
- 第16章: 元编程
- 16.1 模板元编程(TMP)
- 16.2 类型traits(Type Traits)
- 16.3 SFINAE
- 16.4. constexpr
- 16.5 应用实例
- 16.5.1 静态断言与编译期检查
- 16.5.2 变长模板参数处理
- 16.5.3 静态多态 (Static Polymorphism) - CRTP (Curiously Recurring Template Pattern)
- 16.5.4 编译时字符串生成
- 16.6 元编程的优缺点
- 16.7总结
- 习题
- 参考文献
Leanpub 无条件、零风险的100%满意保证
在支付后的60天内,只需简单点击两下,您便可以退书并且取回先前支付的全部金额。退款是手动处理的,因此可能需要几天时间来完成整个流程。
查看完整条款。
在10美元的购买中赚取8美元,在20美元的购买中赚取16美元
对于7.99美元或以上的购买,我们支付80%的版税,对于0.99至7.98美元之间的购买,支付80%的版税减去0.50美元固定费用。在10美元的销售中您可赚取8美元,在20美元的销售中可赚取16美元。因此,如果我们以20美元售出5000本未退款的图书,您将赚取80,000美元。
(是的,一些作者在Leanpub上已经赚取了远超过这个数额的收入。)
事实上,作者们通过在Leanpub上写作、出版和销售已经赚取了超过1400万美元。
了解更多关于在Leanpub上写作的信息
免费更新。无DRM。
如果你购买了Leanpub的书,只要作者更新这本书,你就可以免费获得更新!许多作者使用Leanpub在他们编写书籍的过程中发布他们的作品。所有读者都可以获得免费更新,无论他们何时购买的书或他们支付了多少钱(包括免费)。
大多数Leanpub书籍都提供PDF(适用于计算机)、EPUB(适用于手机和平板电脑)和MOBI(适用于Kindle)格式。书籍包含的格式会显示在此页面的右上角。
最后,Leanpub的书籍没有任何DRM版权保护的限制,所以你可以轻松地在任何支持的设备上阅读它们。