基于Linux的C++(自主模式)

自主模式

  • 什么是随堂模式?

    随堂模式课程一般为每学期一轮次,课程每周更新,作业、考试有截止时间,由课程提供方老师、助教指导,课程完结,成绩由老师确认后,统一发放证书。

  • 什么是自主模式?

    自主模式课程常年开放加入,课件全部开放,作业、考试无截止时间,有学堂在线招募选拔的助教指导,考核通过即可自动获得证书。

来自于: 清华大学 | 分类: 计算机(478)

课程描述

本课程旨在建立Linux环境下进行C++程序开发和系统编程时的正确思维和方法,构筑计算思维与实践能力之间的桥梁。

什么是认证证书?
免费学习
认证学习
名师签名
实名认证
权威性
纸质证书
付费购买
免费赠送

课程简介

Linux操作系统开源的特性使得其获得越来越重要的地位,而Linux系统编程也向C++程序设计者提出了更高的要求。本课程由C/C++语言的共性与特性出发,在深入学习程序设计语言的基础上,进一步强调程序设计语言的适用性,并与Linux系统编程紧密结合,通过大力培养学习者的抽象思维能力和计算思维能力,将学习者对语言作为工具的基本认知转化为动手实践能力,完成从具象到抽象再到具象的思维能力转变。课程内容主要涵盖C++程序设计基本概念、数据组织与算法设计、程序组织、面向对象程序设计方法、泛型编程与模板库以及进程、线程、内存管理、设备驱动程序、网络等Linux系统编程核心主题。

展开

课程章节

第一讲 C/C++基本语法元素
1.1 提纲
1.2 程序设计的基本概念
1.3 简单C/C++程序介绍
1.4 程序设计的基本流程
1.5 基本语法元素
1.6 程序设计风格
1.7 编程实践
第二讲 程序控制结构
2.1 提纲
2.2 结构化程序设计基础
2.3 布尔数据
2.4 分支结构
2.5 break语句
2.6 循环结构
2.7 编程实践
第三讲 函数
3.1 提纲
3.2 函数声明、调用与定义
3.3 函数调用栈框架
3.4 编程实践
第四讲 算法
4.1 提纲
4.2 算法概念与特征
4.3 算法描述
4.4 算法设计与实现
4.5 递归算法(一)
4.6 递归算法(二)
4.7 容错与计算复杂度
4.8 编程实践
第五讲 程序组织与开发方法
5.1 提纲
5.2 库与接口
5.3 随机数库(一)
5.4 随机数库(二)
5.5 作用域与生存期
5.6 典型软件开发流程(一)
5.7 典型软件开发流程(二)
5.8 编程实践
第六讲 复合数据类型
6.1 提纲
6.2 字符
6.3 数组(一)
6.4 数组(二)
6.5 结构体
6.6 编程实践
第七讲 指针与引用
7.1 提纲
7.2 指针基本概念
7.3 指针与函数
7.4 指针与复合数据类型(一)
7.5 指针与复合数据类型(二)
7.6 字符串
7.7 动态存储管理(一)
7.8 动态存储管理(二)
7.9 引用
7.10 编程实践
第八讲 链表与程序抽象
8.1 提纲
8.2 数据抽象(一)
8.3 程序抽象(二)
8.4 链表(一)
8.5 链表(二)
8.6 链表(三)
8.7 链表(四)
8.8 函数指针(一)
8.9 函数指针(二)
8.10 抽象链表(一)
8.11 抽象链表(二)
8.12 编程实践
第九讲 类与对象
9.1 提纲
9.2 程序抽象与面向对象
9.3 类类型
9.4 对象(一)
9.5 对象(二)
9.6 类与对象的成员(一)
9.7 类与对象的成员(二)
9.8 类与对象的成员(三)
9.9 继承(一)
9.10 继承(二)
9.11 继承(三)
9.12 多态(一)
9.13 多态(二)
9.14 编程实践
第十讲 操作符重载
10.1 提纲
10.2 四则运算符重载(一)
10.3 四则运算符重载(二)
10.4 关系与下标操作符重载
10.5 赋值操作符重载(一)
10.6 赋值操作符重载(二)
10.7 赋值操作符重载(三)
10.8 赋值操作符重载(四)
10.9 赋值操作符重载(五)
10.10 流操作符重载(一)
10.11 流操作符重载(二)
10.12 流操作符重载(三)
10.13 操作符重载总结
10.14 编程实践
第十一讲 泛型编程
11.1 提纲
11.2 泛型编程概览
11.3 异常处理机制(一)
11.4 异常处理机制(二)
11.5 运行期型式信息(一)
11.6 运行期型式信息(二)
11.7 模板与型式参数化
11.8 题外话:术语翻译
11.9 泛型编程实践(一)
11.10 泛型编程实践(二)
11.11 泛型编程实践(三)
11.12 泛型编程实践(四)
11.13 泛型编程实践(五)
11.14 泛型编程实践(六)
11.15 泛型编程实践(七)
11.16 泛型编程实践(八)
11.17 泛型编程实践(九)
11.18 泛型编程实践(十)
11.19 编程实践
第十二讲 Linux系统编程基础
12.1 提纲
12.2 程序执行环境(一)
12.3 程序执行环境(二)
12.4 程序执行环境(三)
12.5 程序执行环境(四)
12.6 输入输出(一)
12.7 输入输出(二)
12.8 文件系统
12.9 设备
12.10 库(一)
12.11 库(二)
12.12 makefile文件(一)
12.13 makefile文件(二)
12.14 makefile文件(三)
12.15 编程实践
第十三讲 进程编程
13.01 提纲
13.02 进程基本概念
13.03 信号
13.04 进程管理(一)
13.05 进程管理(二)
13.06 进程管理(三)
13.07 进程间通信(一)
13.08 进程间通信(二)
13.09 进程间通信(三)
13.10 进程间通信(四)
13.11 进程池
13.12 编程实践
第十四讲 线程编程
14.1 提纲
14.2 线程基本概念
14.3 线程管理(一)
14.4 线程管理(二)
14.5 线程管理(三)
14.6 线程管理(四)
14.7 线程同步机制(一)
14.8 线程同步机制(二)
14.9 C++11线程库(一)
14.10 C++11线程库(二)
14.11 C++11线程库(三)
14.12 C++11线程库(四)
14.13 C++11线程库(五)
14.14 编程实践
第十五讲 网络编程
15.1 提纲
15.2 Internet网络协议
15.3 套接字(一)
15.4 套接字(二)
15.5 编程实践

授课教师

  • 乔林 清华大学 计算机系 副教授

    清华大学计算机系副教授,工学博士。国家级教学团队骨干成员,曾获清华大学青年教师教学基本功比赛一等奖,清华大学青年教师教学优秀奖,出版教材和著作二十余部。主要研究兴趣有多核处理器系统结构、片上网络、无线传感器网络等,在国内外刊物和会议上发表论文多篇,主持和参与973、863、国家自然科学基金、重大科技专项等项目多项。

精华笔记

精华笔记正在评选中,去看看全部笔记

常见问题

本课程使用什么教材?

无指定教材。大体上市面上任何一本C/C++的教材都可以参考。至于Linux系统编程部分,以Mark Mitchell、Jeffrey Oldham和Alex Samuel所著《Advanced Linux Programming》和Robert Love所著《Linux System Prorgramming (2/e)》为佳。不过学习者要注意的是,这两本书的主要编程语言为C而不是C++。

本课程仅仅使用C++语言吗?

不。除了C++语言,本课程还使用了汉语和英语。坦率地说,我们可以在业界看到很多有关C和C++语言的争论,尤其是在系统编程领域。正像我在回答上一问题所指出的,很多Linux系统编程方面的书籍使用的是C语言。实际上,编程语言的选择压根就不是问题的重点,不管你使用的编程语言是C还是C++,计算思维能力和抽象思维能力的培养是一贯的,它们之间最大的差别仅仅在于实现的手段而已。相信我,即便仅仅使用C,你也可以构造复杂的抽象代码;而即便使用C++,如果你的思维习惯仍然停留在“见山就是山”的具象阶段,代码质量一样会惨不忍睹。

我没有一点C/C++语言的基础,怎么办?

再次强调,本课程并不需要你有这方面的基础,你会在课程中学到你所需要使用到的知识。当然因为课时的原因,并不是所有C/C++知识都会在本课程上讲授,对于那些被我们省略的知识点,你可以自学,也可以假装它们压根就不存在。

我没有一点Linux操作系统基础,怎么办?

凉拌。自学!同样地,本课程并不需要你有Linux操作系统的基础,但是你至少要会使用它。按照我的经验,哪怕在学习本课程的同时学习使用Linux操作系统,时间上也是来得及的,所以不用特别担心。辛苦一点而已,相比计算思维和抽象思维能力的培养,学习使用Linux操作系统压根就不算个事儿。