- 本课程包括:
- 5个月群内答疑,讲师助教及时解答
- 课程有效期为1年,建议合理规划学习
- 课程配有作业练习,助教一对一批改
- 班主任带班,严格督学,告别拖延
- 根据学习情况颁发结业证书、优秀学员证书
李伟
美国微软高级工程师,清华大学博士。毕业后一直从事软件开发相关的工作,曾先后在百度自然语言处理部机器翻译组负责线上系统,在微软亚洲工程院从事Bing搜索的相关开发。近20年C++开发经验,出版了《C++模板元编程实战》书籍。
C++是一门追求高性能的高级语言,在底层开发、高性能计算中占据了重要的角色;C++又是一门相对难以掌握的编程语言,与其它语言相比,它更加难学,难以精通。
这门课程旨在讨论C++的基础知识,重点讲解C++的基本语法及语法背后的底层细节,比如同样是for循环,如何尽可能的提升其执行效率。同时,课程内容也会适时融入工程经验,为后续进一步学习与使用C++打下牢固的基础。
课程目标
深入基础 讲解语法细节
- 多角度理解:什么是C++?
- 掌握语法背后的底层原理
- 从类型到语句渐进学习语法细节
高效编程 探索现代C++
- 理解现代C++的动态内存分配技术
- 熟练使用序列与关联容器
- 掌握泛型算法与Lambda表达式
拓展范式 丰富编程思路
- 全面理解面向对象编程思想
- 掌握元编程的编程范式
- 学习其他的工具和技术
课程脉络
-
首先将从类型、表达式到语句、函数、IO全面讲解C++的基础。虽然是基础,但讲解的会很深入,通过结合汇编代码帮助理解底层实现细节,利用cpp reference、cpp insights、compiler explore等深入讲解语法细节,可以让同学们在短时间内打下C++坚实的基础。
-
接着会从动态内存分配、序列与关联容器、泛型算法和Lambda表达式部分摸索现代C++的语法特性。会详细介绍智能指针如何解决内建指针的痛点,逐个介绍C++引入的容器使用方法,引入泛型算法、Lambda表达式提高编程效率。
-
最后会从面向过程编程过渡到面向对象编程和元编程的编程范式,讲解类中特殊的成员方法以及它们的自动合成行为,并引入操纵程序的程序(元程序)的编程范式——元编程,以完成编译期计算。
课程脉络
-
首先将从类型、表达式到语句、函数、IO全面讲解C++的基础。虽然是基础,但讲解的会很深入,通过结合汇编代码帮助理解底层实现细节,利用cpp reference、cpp insights、compiler explore等深入讲解语法细节,可以让同学们在短时间内打下C++坚实的基础。
-
接着会从动态内存分配、序列与关联容器、泛型算法和Lambda表达式部分摸索现代C++的语法特性。会详细介绍智能指针如何解决内建指针的痛点,逐个介绍C++引入的容器使用方法,引入泛型算法、Lambda表达式提高编程效率。
-
最后会从面向过程编程过渡到面向对象编程和元编程的编程范式,讲解类中特殊的成员方法以及它们的自动合成行为,并引入操纵程序的程序(元程序)的编程范式——元编程,以完成编译期计算。
课程大纲
-
第1章:C++基础
本节将多角度讲解什么是C++,并介绍常用的C++开发工具,让同学们建立对C++新的认识。通过C++的编译/链接模型,使同学们理解一个C++文件是如何成为一个可执行程序的。
-
第2章:C++初探
本节将初探C++,通过从最简单的“Hello World”程序开始讲解什么是C++程序,然后介绍C++的I/O,并通过猜数字来实现带有用户交互的程序。
-
第3章:对象与基本类型
本节将介绍什么是类型,进一步讲解变量、字面值及其类型,接着讲述了从指针到引用的复合类型,最后重点介绍了类型别名与类型的自动推导。
-
第4章:数组、vector与字符串
本节讲解了C++内建数组的相关知识,接着介绍了C++标准提出的vector容器和string的使用方法,并与内建数组和C字符串进行了对比…
课程亮点
- 系统梳理C++内容,细致讲解众多知识点
- 将结合汇编语言理解C++底层细节,更高效应用
- 学会如何优化程序、提高程序效率、进行代码设计
- 结合程序讲原理,“这个代码是做什么的?”带着思考学习,有趣生动
- 课程适合谁学习
- 具备一些程序设计语言基础的同学/工程师
- C++刚入门,基础语法不完全熟悉的同学/工程师
- 熟悉C++基础语法,但不了解语法底层细节的同学/工程师
- 课程所需的基础知识
- 至少学过一门编程语言
- 一台能够编写并调试程序的电脑
全方位的学习服务
个性化增值服务,学习有保障更高效
-
作业批改
作业批改 助教1V1批改作业,定期针对作业中的“通病”进行点评
-
结业证书
结业证书 本课程将根据作业完成情况评选结业学员及优秀学员,颁发证书
-
实时答疑
实时答疑 讲师微信群答疑,及时解决大家遇到的问题
-
班班督学
班班督学 班主任全程带班,不定时“关照”未交作业的同学,克服拖延
- 1-1:【资料】c++常见问题整理
- 1-2:课程说明
- 1-3:【补充资料】C++IDE
- 1-4:作业提交要求
-
第1章: C++基础 3节课程·1小时49分钟
本节将多角度讲解什么是C++,并介绍常用的C++开发工具,让同学们建立对C++新的认识。通过C++的编译/链接模型,使同学们理解一个C++文件是如何成为一个可执行程序的。
- 2:【课件】第一章
-
第1节: 什么是C++
- 3:【视频】什么是C++
-
第2节: C++开发环境与相关工具
- 4:【视频】C++的开发环境与相关工具
-
第3节: C++的编译/链接模型
- 5:【视频】C++的编译与链接模型
-
第2章: C++初探 4节课程·1小时53分钟
本节将初探C++,通过从最简单的“Hello World”程序开始讲解什么是C++程序,然后介绍C++的I/O,并通过猜数字来实现带有用户交互的程序。
- 6:【课件】chapter1
-
第1节: 从Hello world谈起
- 7:【视频】从Hello world谈起
-
第2节: 系统 I/O
- 8:【视频】系统IO
-
第3节: 猜数字与控制流
- 9:【视频】猜数字与控制流
-
第4节: 结构体与自定义数据类型
- 10:【视频】结构体与自定义数据类型
-
第3章: 对象与基本类型 7节课程1篇阅读材料·1次作业·5小时37分钟
本节将介绍什么是类型,进一步讲解变量、字面值及其类型,接着讲述了从指针到引用的复合类型,最后重点介绍了类型别名与类型的自动推导。
- 11:【课件】chapter 2
-
第1节: 从初始化和赋值语句谈起
- 12:【视频】从初始化和赋值语句谈起
-
第2节: 类型详述
- 13-1:【视频】类型详述 I
- 13-2:【视频】类型详述 II
-
第3节: 复合类型:从指针到引用
- 14:【视频】复合类型:从指针到引用
-
第4节: 常量与常量表达式类型
- 15:【视频】常量类型与常量表达式
-
第5节: 类型别名与类型的自动推导
- 16:【视频】类型别名与类型的自动推导
-
第6节: 域与对象的生命周期
- 17:【视频】域与对象的生命周期
-
第7节: 小结
- 18:【视频】小结
- 19-1:【作业】Project1
- 19-2:Project1作业思路提示
-
第4章: 数组、vector与字符串 3节课程·4小时19分钟
本节讲解了C++内建数组的相关知识,接着介绍了C++标准提出的vector容器和string的使用方法,并与内建数组和C字符串进行了对比。
- 20:【课件】chapter3
-
第1节: 数组
- 21-1:【视频】数组的引入 I
- 21-2:【视频】数组的引入 II
- 21-3:【视频】从数组到指针
- 21-4:【视频】其它操作
- 22-1:【视频】C字符串
- 22-2:【视频】多维数组
-
第2节: vector
- 23:【视频】vector
-
第3节: string
- 24:【视频】string
-
第5章: 表达式基础与详述 9节课程·5小时10分钟
本节将讲解什么是表达式,介绍C++的左值、右值的划分与转换,四大类型转换等知识,最后介绍各个操作符的使用细节,并引入C++17添加了对操作符限定求值顺序的说明。
- 25:【课件】chapter4
-
第1节: 表达式基础:引入
- 26:【视频】引入
-
第2节: 表达式基础:左值与右值
- 27:【视频】左值与右值
-
第3节: 表达式基础:类型转换
- 28:【视频】类型转换
-
第4节: 表达式详述:算术操作符
- 29:【视频】算术操作符
-
第5节: 表达式详述:逻辑与关系操作符
- 30:【视频】逻辑与关系操作符
-
第6节: 表达式详述:位操作符
- 31:【视频】位操作符
-
第7节: 表达式详述:赋值操作符
- 32:【视频】赋值操作符
-
第8节: 表达式详述:自增与自减运算符
- 33:【视频】自增与自减运算符
-
第9节: 表达式详述:其他操作符
- 34:【视频】其他操作符
-
第6章: 语句 5节课程1篇阅读材料·1次作业·3小时45分钟
本节将介绍语句的相关基础,从最基本的非顺序语句goto开始介绍分支语句、循环语句,在介绍的同时,会穿插C++的新特性,如带初始化语句的if和switch,[[fallthrough]]属性、range-for等,最后通过将switch和for语句结合,优美地完成了“达夫设备”的应用。
- 35:【课件】chapter 5
-
第1节: 语句基础
- 36:【视频】序言
- 37:【视频】语句基础
-
第2节: 分支语句
- 38:【视频】if语句
- 39:【视频】switch
-
第3节: 循环语句
- 40:【视频】while循环语句
- 41:【视频】do-while循环语句
- 42:【视频】for循环语句
- 43:【视频】基于范围的for循环
- 44:【视频】break continue
-
第4节: 语句的综合应用——达夫设备
- 45:【视频】达夫设备
-
第5节: 作业实践
- 46-1:【作业】Project2
- 46-2:关于第二次作业的补充说明
- 46-3:Project2作业思路提示
-
第7章: 函数 4节课程·6小时5分钟
本节将介绍什么是函数,详细讲述函数的参数、函数体和返回类型三个部分,接着讲解了C++的函数重载与重载解析步骤,最后讲述了递归函数、内联函数、constexpr函数等其他函数的应用。
- 47:【课件】chapter 6
-
第1节: 函数基础
- 48:【视频】函数基础
-
第2节: 函数详解
- 49:【视频】函数详解-参数
- 50:【视频】函数详解-函数体
- 51:【视频】函数详解-返回类型
-
第3节: 函数重载与重载解析
- 52-1:【视频】函数重载与重载解析
- 52-2:【视频】名称查找
- 52-3:【视频】重载解析
-
第4节: 函数相关的其它内容
- 53-1:【视频】函数相关的其它内容
- 53-2:【视频】内联函数
- 53-3:【视频】constexpr函数与consteval函数
- 53-4:【视频】函数指针
-
第8章: 深入IO 6节课程1篇阅读材料·1次作业·4小时3分钟
以《Standard C++ IOStreams and Locales》为大纲,对C++的IOStream进行介绍,详细讲解了非格式化IO和格式化IO的用法,接着拓展到了文件和内存流的操作,最后介绍了流的状态、定位和同步。
- 54:【课件】chapter 7 update 1
-
第1节: 序言
- 55:【视频】序
-
第2节: IOStream概述
- 56:【视频】 IOStream概述
-
第3节: 输入与输出
- 57-1:【视频】输入与输出
- 57-2:【视频】输入与输出 II
- 57-3:【视频】输入与输出 III
-
第4节: 文件与内存操作
- 58-1:【视频】文件与内存操作 I
- 58-2:【视频】文件与内存操作 II
-
第5节: 流的定位、同步和状态
- 59-1:【视频】流的状态
- 59-2:【视频】流的定位
- 59-3:【视频】流的同步
-
第6节: 作业
- 60-1:【作业】Project3
- 60-2:【资料】补充说明
- 60-3:Project3作业思路提示
- 60-4:【视频】Project3作业讲解
-
第9章: 动态内存管理 3节课程·4小时1分钟
本节讲解了动态内存基础,首先介绍了C++系统自身的动态内存分配方法,提出其内存所有权不清晰的问题,然后引入了shared_ptr、unique_ptr、weak_ptr三大智能指针的解决方案。
- 61:【课件】chapter 8
- 62:【视频】序
-
第1节: 动态内存基础
- 63-1:【视频】栈内存与堆内存
- 63-2:【视频】new的几种常见形式
- 63-3:【视频】delete的常见用法
-
第2节: 智能指针
- 64-1:【视频】为什么引入智能指针
- 64-2:【视频】智能指针—shared_ptr
- 64-3:【视频】智能指针—unique_ptr
- 64-4:【视频】智能指针—weak_ptr
-
第3节: 动态内存的相关问题
- 65-1:【视频】动态内存的相关问题 Ⅰ
- 65-2:【视频】动态内存的相关问题 Ⅱ
-
第10章: 序列与关联容器 5节课程·5小时9分钟
本节概述了容器的基础,从序列容器、关联容器、适配器和生成器进行分类讲解,根据不同容器的功能,摸索容器设计上的精妙,不仅让同学们学会使用容器提高开发效率,也在接口设计上得到提升。
- 66:【课件】chapter 9
-
第1节: 容器概述
- 67:【视频】容器概述
-
第2节: 序列容器
- 68-1:【视频】array容器模板
- 68-2:【视频】vector容器模板
- 68-3:【视频】list / deque / basic_string容器模板
-
第3节: 关联容器
- 69-1:【视频】set
- 69-2:【视频】map / multiset / multimap
- 69-3:【视频】unordered set / map / multiset / multimap
-
第4节: 适配器与生成器
- 70-1:【视频】类型适配器和接口适配器
- 70-2:【视频】数值适配器和生成器
-
第5节: 本章小结
- 71:【视频】总结
-
第11章: 泛型算法 4节课程·4小时42分钟
本节主要讲解泛型算法,即是C++标准库中提供的算法,通过归纳分类,分析Possible implementation帮助同学们理解泛型算法,为了给泛型算法提供自定义的计算逻辑,引入了bind、Lambda表达式的讨论,最后讲解了C++20的泛型算法改进版Ranges,能够更加灵活的组织程序逻辑。
- 72:【课件】chapter 10更新版
-
第1节: 泛型算法
- 73-1:【视频】泛型算法 I
- 73-2:【视频】泛型算法 II
- 73-3:【视频】泛型算法 III
- 73-4:【视频】泛型算法 IV
-
第2节: bind与lambda表达式
- 74-1:【视频】bind
- 74-2:【视频】Lambda表达式 I
- 74-3:【视频】Lambda表达式 II
-
第3节: 泛型算法改进—ranges
- 75:【视频】泛型算法改进——ranges
-
第4节: 本章小结
- 76:【视频】总结
-
第12章: 类与面向对象编程 5节课程·7小时24分钟
本节介绍类的基本概念,首先从结构体引入类的概念,接着讲解了成员函数的相关细节,然后讲述了访问限定符和友元的知识,最后针对构造、析构和复制等特殊成员函数进行详细讨论。
- 77:【课件】chapter 11
-
第1节: 结构体与对象聚合
- 78-1:【视频】part I
- 78-2:【视频】part II
-
第2节: 成员函数
- 79-1:【视频】part I
- 79-2:【视频】part II
-
第3节: 访问限定符与友元
- 80:【视频】访问限定符与友元
-
第4节: 构造、析构与复制成员函数
- 81-1:【视频】part I
- 81-2:【视频】part II
- 81-3:【视频】part III
- 81-4:【视频】part IV
-
第5节: 字面值类、成员指针与bind交互
- 82-1:【视频】part I
- 82-2:【视频】part II
-
第13章: 类的细节 4节课程1篇阅读材料·1次作业·6小时27分钟
本节讲解类的进阶知识,首先详细讨论了运算符重载的相关知识,然后在类的继承上,展开了虚函数、继承与特殊成员函数、public与private继承、空基类优化等知识的讨论。
- 83:【课件】chapter 12
-
第1节: 运算符重载
- 84-1:【视频】运算符重载 I
- 84-2:【视频】运算符重载 II
- 84-3:【视频】运算符重载 III
- 84-4:【视频】运算符重载 IV
-
第2节: 类继承
- 85-1:【视频】类的继承
- 85-2:【视频】虚函数 I
- 85-3:【视频】虚函数 II
- 85-4:【视频】继承与成员函数
-
第3节: 类继承—补充知识
- 86-1:【视频】补充知识 I
- 86-2:【视频】补充知识 II
-
第4节: 作业
- 87-1:【作业】Project4
- 87-2:Project4作业思路提示
- 87-3:【视频】Project4作业代码讲解
-
第14章: 模板 4节课程·5小时46分钟
本节介绍模板的基础,从函数模板开始介绍实例化控制、完全特化等基础,接着讨论了类模板的实例化、偏特化和模板实参推导等知识,然后讲解了C++20引入的Concepts来限制模板参数,最后讲述了完美转发std::forward和Lambda表达式相关等知识。
- 88:【课件】chapter 13
-
第1节: 函数模板
- 89-1:【视频】函数模板
- 89-2:【视频】模板实参的类型推导
- 89-3:【视频】函数模板实参推导的若干讨论
- 89-4:【视频】函数模板的实例化控制
- 90-1:【视频】函数模板的特化
- 90-2:【视频】避免使用函数模板的特化
-
第2节: 类模板与成员函数模板
- 91-1:【视频】类模板与成员函数模板
- 91-2:【视频】类模板的实例化、特化与实参推导
-
第3节: Concepts
- 92-1:【视频】C++ 20新概念 Concepts
- 92-2:【视频】requires表达式
-
第4节: 模板相关内容
- 93-1:【视频】数值模板参数与模板模板参数
- 93-2:【视频】别名模板
- 93-3:【视频】变长模板
- 93-4:【视频】包展开与折叠表达式
- 94-1:【视频】完美转发
- 94-2:【视频】Lambda表达式模板
- 94-3:【视频】消除歧义
- 94-4:【视频】变量模板
-
第15章: 元编程 4节课程1篇阅读材料·1次作业·2小时45分钟
基于上一节的内容,本节详细讲解了元编程的编程思路和方法,首先从元程序形式和元数据引入元编程的概念,然后对元编程的顺序、分支、循环代码的编写方式进行逐一讨论,最后讲述了减少实例化的技巧。
- 95:【课件】chapter 14
-
第1节: 元编程的引入
- 96-1:【视频】章节介绍
- 96-2:【视频】元编程的引入
- 96-3:【视频】 元编程的引入(续)
-
第2节: 顺序、分支、循环代码的编写方式
- 97-1:【视频】顺序代码的编写方式
- 97-2:【视频】分支代码的编写方式
- 97-3:【视频】循环代码的编写方式
-
第3节: 减少实例化的技巧
- 98-1:【视频】减少实例化技巧
- 98-2:【视频】本章小结
-
第4节: 作业
- 99-1:【作业】Project5
- 99-2:Project5作业思路提示
-
第16章: 其他的工具与技术 6节课程1篇阅读材料·1次作业·3小时57分钟
本节是对前15节的补充知识,使整个C++基础课程更加完备、全面。主要讲解了C++的异常处理方法,并介绍了枚举与联合、嵌套类与局部类、嵌套名字空间与匿名名字空间、位域与volatile关键字等知识。
- 100:【课件】chapter 15
-
第1节: 异常处理
- 101-1:【视频】异常处理 I
- 101-2:【视频】异常处理 II
- 101-3:【视频】异常处理 III-1
- 101-4:【视频】异常处理 III-2
- 102:【视频】异常处理 IV
-
第2节: 枚举与联合
- 103-1:【视频】 枚举与联合 I
- 103-2:【视频】枚举与联合 II
-
第3节: 嵌套类与局部类
- 104:【视频】嵌套类与局部类
-
第4节: 嵌套名字空间与匿名名字空间
- 105:【视频】嵌套名字空间与匿名名字空间
-
第5节: 位域与volatile关键字
- 106:【视频】 位域与volatile关键字
-
第6节: 作业
- 107:【视频】 本章小结
- 108-1:【作业】Final Project
- 108-2:Final Project作业思路提示
课程讨论区
已累计讨论26495个问题
课程配备专属讨论区,不仅有讲师、助教全程答疑,更能与同学们交流讨论,在思维碰撞中加深理解
在课程中随想随问,同学们的问题也可能启发到你
在课程讨论区,和684位同学一起探讨更多问题···
作业批改
已累计批改4951份作业
助教一对一批改作业,定期针对作业中的问题进行评讲
结业证书
课程根据作业完成情况评选结业学员及优秀学员,颁发证书
优秀学员更能获得额外购课优惠
班班督学
班班、助教、讲师全程带班,日常答疑解惑
FAQ
1、课程可以试听吗?
可以,您可以联系客服领取试听内容,根据试听的效果决定是否报名。
2、报名课程后,如果不满意,可以退款吗?
我们承诺: 报名后7天内且学习进度停留在第一章节的内容可以无条件全额退款,若您的学习进度超过第一章或报名时间超过7天将不再支持退款哦。课好不好,学了就知道了!
3、报名课程的费用可以开发票吗?
深蓝学院所有课程都可以开具发票。您可以登录深蓝学院官网(https://www.shenlanxueyuan.com),进入个人“账户中心”,在线申请。
4、报名后怎么开始学习呢?
PC端:登录深蓝学院官网(https://www.shenlanxueyuan.com),进入“个人中心”或“我的课程” 的课程即可开始学习。课程中包含讲师讲解的视频、课件、代码、作业及其它学习资料。建议在PC端学习体验更好。
如果想缓存视频,可下载深蓝学院APP。
5、可以跟讲师直接交流吗?
报名课程后添加课程对应的班主任微信,由其邀请加入微信答疑群。在答疑群内,您可以直接跟讲师和其他同学讨论交流。
报名后在对应的课程详情页,可查看对应的班主任微信。
6、学习形式和学习周期是怎样的?
为保证学习质量方便同学们反复观看,本课程采用录播形式。建议同学们登录深蓝学院PC端官网体验更佳。
7、课程有有效期吗?
为督促同学们学习,保证学习效率,课程有效期为一年。在有效期内,可以随时反复观看视频。需要提醒大家的是,课程答疑、作业批改&讲评等课程相关服务期从报名加入课程后开始计算至少保证五个月。
8、作业会提供参考答案吗?
不提供参考答案。当每章作业截止提交后,会解锁作业思路讲解。我们希望引导大家培养独立思考的习惯和敢于动手实践的勇气,以便尽快适应实际工作中解决问题的模式。做作业过程中,如果有任何困惑和问题,可以在课程讨论区和交流群内提问解决。
课程预览
C++基础与深度解析