第1周
课程简介、环境准备及面向对象的精髓
本周介绍本课程的定位、价值和学习本课程需要的准备知识、环境搭建;并通过面试题来介绍面向对象思维的本质及纠正一些对面向对象编程经典错误的理解。
课程安排:
1、本课程的价值、学习的前置知识、学习的目标和注意事项
2、Windows C++环境的搭建
3、Mac C++环境的搭建
4、Linux Ubuntu发行版环境的搭建
5、QT环境的搭建
6、HelloWorld从面向过程编程到面向对象编程的过渡
7、从微软公司的一道面试题来谈从面向过程到面向对象
8、从面向过程编程到面向对象过渡的理论分析
9、面向对象三大特性及实现一个不能被继承的类
10、少用继承及接口继承的使用
11、少用虚函数及函数指针代替虚函数的方案
12、面向对象编程的两个常见错误理解
13、C++避免钻石继承的方法--虚继承
第2周
从工程角度从新审视类的构造,赋值等
通过编写MyString类的3个构造、2个赋值和1个析构,从本上解析C++中比较难以理解但又十分重要的一些概念:隐式转换、左值、右值、左值引用、右值引用及C++11重要的特性move语义。
课程安排:
1、怎么实现一个MyString的Class
2、Class的321实现
3、MyString的move基本实现
4、总结--C++面向对象编程对
5、再看类MyString的构造实现
6、防止构造函数的隐式转换类型
7、C++的值类型和引用类型
8、一些重要概念:左值、右值、左值引用、右值引用等;
9、左值右值相关
9、move语义的意义和使用细节
第3周
深度剖析对象的建立过程及优化
从最佳工程的角度解析C++对象创建的过程、说明构造函数的本质,RVO的返回值优化、const关键词的优化等。
课程安排:
1、编译器优化与mov的语义的关系及返回值优化
2、返回值优化:RVO和NRVO
3、返回值优化策略的选择
4、const的基本使用
5、const的修饰对象的引用和函数
6、const、mutable和volatile
7、再谈构造函数--什么该做什么不该做
8、再谈构造函数--初始化顺序和参数列表
9、静态成员变量的初始化
10、CPP11中委托构造函数的使用
第4周
函数和表达式本质
重点解析函数重载、运算符重载;函数对象、lambda和inline函数的本质及它们的使用场景。
课程安排:
1、函数重载
2、重载函数的本质和实现原理
3、运算符重载
4、Rational类的实现
5、Rational类的运算符重载实现
6、函数对象的本质是什么
7、函数内部怎么定义函数--lambda表达式
8、Lambda表达式实现闭包
9、Lambda表达式和函数对象使用的类比
10、Lambda表达式的意义
11、inline内联函数的使用和本质
第5周
C++内存分配:堆和栈的详细分析
重点解析C++内存管理的细节,堆和栈及C++推崇的资源分配RAII在实际项目中的运用。
课程安排:
1、几道面试题来看堆和栈在内存分配和传递
2、几道面试题来看堆和栈在内存分配和传递2
3、CPP的内存世界划分
4、从一个经典函数错误起谈谈栈空间调试
5、汇编调试基础1
6、汇编调试基础2
7、从汇编角度看程序函数栈和main函数流程1
8、从汇编角度看程序函数栈和main函数流程2
9、从堆栈角度来分析ShellCode和软件安全1
10、从堆栈角度来分析ShellCode和软件安全2
11、C++中资源分配的方式:RAII
12、析构函数为什么是虚函数及RAII的具体使用
13、在异常情况下RAII如何保证资源的顺利释放
第6周
C++智能指针、异常、new及对象模型
解析在C++中如何实现智能指针、及C++中异常的使用、new运算符的本质及C++对象模型内部真实的结构。
课程安排:
1、怎么实现智能指针
2、C++中常见的智能指针
3、C++中到底该不该用异常
4、怎么用异常
5、new的实现细节,如果new失败了怎么办,工程中怎么处理new
6、从底层分析C++中虚函数的本质
7、C++对象模型初步
8、动态多态和静态多态
9、C++的模板编程
10、C++11中对模板编程的高级支持
第7周
实现C++跨平台爬虫实战
利用上面所学的知识结合一些QT的库,完成一个跨平台的C++爬虫程序。
课程安排:
1、爬虫需求分析
2、QT的基本使用,工程创建等
3、QT怎么实现一个简单的跨平台爬虫
4、爬虫的网络类实现
5、爬虫的数据处理和数据存储
6、爬虫的整体逻辑
8、爬虫的测试、存在待改进的问题