《Essential C++》读书摘要
基本信息
- 作者:Stanley B. Lippman(C++标准委员会成员,C++ Primer作者)
- 来源:云盘 /田浩然上传的资料/电子书/C_C++/Essential C++/[计算机科学经典着作].Addison.Wesley.Stanley.B.Lippman.Essential.C++.pdf
- 页数:244页
- 年份:2002年
- 类别:编程书籍 / C++
核心框架
本书专为有编程经验的开发者设计,以”问题导向”方式组织,按编程范式递进:
- 基础编程 → 2. 过程式编程 → 3. 泛型编程 → 4. 基于对象的编程 → 5. 面向对象编程 → 6. 模板编程 → 7. 异常处理
每个章节围绕一个实际编程问题展开,逐步引入语言特性。
各章要点
第1章:基础C++编程
- 程序结构:包含头文件、main函数、输出流
- 数据对象:定义、初始化、表达式
- 条件与循环:if/switch、for/while/dowhile
- 数组与向量:
#include <vector>,动态数组 - 指针:内存地址操作、灵活性来源
- 文件I/O:fstream、ifstream、ofstream
核心概念:C++是”零开销抽象”——你用的每个特性都有明确的实现成本。
第2章:过程式编程(函数)
- 函数定义与调用
- 默认参数值
- 局部静态对象(
static) - 内联函数(
inline) - 函数重载
- 模板函数
- 函数指针
关键代码模式:
// 模板函数
template <typename T>
T sum(T a, T b) { return a + b; }
// 函数指针
void (*fp)(int) = &func;第3章:泛型编程(容器与算法)
- 指针算术
- 迭代器:序列容器的统一访问接口
- 顺序容器:vector、deque、list
- 通用算法:
find、sort、for_each、transform等 - map与set
- 插入迭代器:
back_inserter、inserter - iostream迭代器:
istream_iterator、ostream_iterator
核心洞察:迭代器是容器与算法之间的”胶水”,使算法可以独立于容器工作。
第4章:基于对象的编程(类)
- 类定义:数据成员 + 成员函数
- 构造函数与析构函数
mutable与const成员this指针- 静态类成员
- 迭代器类实现
- 友元函数/类
- 复制赋值运算符
- 函数对象(Functor)
- iostream操作符重载
关键原则:RAII(Resource Acquisition Is Initialization)——资源生命周期与对象生命周期绑定。
第5章:面向对象编程
- 多态概念
- 无继承的多态(虚函数表的替代方案)
- 抽象基类
- 派生类
- 继承层次
- RTTI(运行时类型识别):
dynamic_cast、typeid
核心公式:
// 多态基类
class Base {
public:
virtual ~Base() {}
virtual void print() const = 0; // 纯虚函数
};第6章:模板编程
- 类模板定义
- 模板类型参数
- 模板成员函数实现
- 模板输出操作符
- 常量表达式与默认参数
- 模板参数作为策略
- 成员模板函数
第7章:异常处理
- 抛出异常:
throw - 捕获异常:
catch - try块
- 局部资源管理(RAII + 异常安全)
- 标准异常层次
异常安全三保证:
- 基本保证:对象处于有效状态
- 强保证:操作要么完全成功,要么完全失败(无副作用)
- 无抛保证:永不抛出异常
附录A:习题解答
- 每章课后练习的完整解答
附录B:通用算法手册
- accumulate、find、sort、transform等50+算法的快速参考
- 每个算法含:头文件、签名、示例代码
学习建议
- 先学Python再学C++:Python帮你理解”编程思想”,C++帮你理解”底层机制”
- 重点掌握:第3章(泛型编程)和第4章(类)——这是C++与其他语言最大的区别
- 避坑:不要过早陷入模板元编程,先把类和使用STL容器用好
- 结合Primer:本书是”速成版”,深入理解需搭配《C++ Primer》
关联知识
- Effective STL — STL使用50条准则,与本书第3章互补
- C++ Primer — 更全面的C++入门,本书可作为前置速览