转载自 编程剑谱公众号
1、
C++ 基础:C++ 是面向对象的语言,一定要理解清楚面向对象的思想,先把 C++ 的基础知识点打牢,刚从面向过程中转变过来,一定一定要适应面向对象的写法。
在学习面向对象的时候,也要考虑如何用面向过程去实现面向对象(其实也就是结构体中有一个成员是函数指针),对于 C++ 的基础知识,我简单罗列如下:
1、const的用法
2、引用的用法
3、#define用法
4、构造函数
5、析构函数
6、拷贝构造
7、new、delete 和 malloc、free 的区别
8、访问限定符 public、private、protected
9、深拷贝和浅拷贝
10、友元函数
11、static
12、内联函数
13、继承、虚继承
14、钻石继承问题
15、同名覆盖问题
16、虚函数表
17、虚指针
18、虚函数、纯虚函数
19、接口
20、多态
21、重写
22、重载
23、函数重载
24、运算符重载
25、流类库和文件
书籍:
<C++ Primer> 第 5 版先全面的了解清楚 C++ 的基础。
2、
C++ 进阶:函数模板、类模板,C++ 中对于异常的处理,对于继承和多态底层的理解,对于 virtual 底层的理解等。
对于 C++ 中 boost 库八大智能指针的掌握与理解,其核心是理解并且剖析过相应的源码, <scoped_ptr/shared_ptr/weak_ptr> 这三个是最核心的智能指针,理解清楚智能指针的本质是,内存的申请与释放全部交给了对象管理,以避免人为疏忽,造成内存泄露。
书籍:
<Effective C++>
<more Effectice C++>
<深度探索 C++ 对象模型>
<C++ 沉思录>
3、
STL 源码:对于 STL 中的容器剖析,常见容器有 list、vector、stack、queue、map 等,考察自动扩容的原理、map 的底层实现(RBtree),源码是必须手动至少剖析一遍的。
对于迭代器、空间配置器的理解,比如:一级空间配置器、二级空间配置器的运用场合分别是什么?一二级空间配置器的本质是什么,如何用内存池去管理?所存在的问题又有哪些,源码又是如何实现的等等,这些问题都需要去思考。
书籍:
<STL 源码剖析>
<泛型编程与STL>