hi,小慕
课程

中国大学MOOC,为你提供一流的大学教育

hi,小mooc
C++程序设计(面向对象进阶)
第6次开课
开课时间: 2021年02月19日 ~ 2021年06月19日
学时安排: 4-6小时每周
当前开课已结束 已有 8811 人参加
老师已关闭该学期,无法查看
课程详情
课程评价(353)
spContent=本课程介绍C++11~20标准的程序设计方法。由网易云课堂计算机课程体系《C++程序设计》全面改版。 课件中英文对照,便于学习计算机术语。 学过C、Java或者Python,想要了解新标准C++,可以参加本课程学习
本课程介绍C++11~20标准的程序设计方法。由网易云课堂计算机课程体系《C++程序设计》全面改版。 课件中英文对照,便于学习计算机术语。 学过C、Java或者Python,想要了解新标准C++,可以参加本课程学习
—— 课程团队
课程概述

为什么要学这门课程?


  1. 学C语言后想进阶学C++;

  2. 学Java后想了解C++这个同门大佬;

  3. 听说C++ 11/14/17/20被称为“Modern C++”,想看看它和“Classic C++”有啥不同;

  4. 想学习编码规范以写出【好看】的代码。



这门课程要求:


  1. 你已有编程基础,知道数据类型、分支循环、数组等语言要素;

  2. 你已经写过代码,想看看C++能否多快好省地编程序。



这门课程不适合:


  1. 从未接触过编程(可以先学C语言入门);

  2. 希望用三行代码改变世界(建议去学Python);

  3. 认为Java能搞定一切(奇迹和灾难都在JVM中);

  4. 非IT专业但听说编程是职场必备能力(可以先学解释型语言,更易入门)。



必须要学C++的理由:


  1. 做人工智能研究,想要深入底层;比如TensorFlow的核心是用C++写的;

  2. 做游戏开发,包括端游和网游后台,以发挥计算机的全部性能,需要C++;

  3. 做智能硬件、嵌入式或硬件驱动开发;C++会提供更多工具,生产效率更高;

  4. 你喜欢。



必须要学本课程的理由:


  1. 学了C++,但是希望学习C++11~C++20等新标准的特性及编程范式;

  2. 学了C++,但是还在用typedef,或者认为 for(auto i : array)是写错了;

  3. 定义变量时轮流使用26个英文字母,不够的话再加上下划线  (⊙_⊙)?



课程内容更新安排:

  1. 第一期课程主要介绍C++基础及C++11~17的功能性增强;

  2. 第二期课程补充一些C++17的基础特性

  3. 第三期课程继续补充C++11~17中一些较难理解的特性,并选择少量C++20的新增特性

  4. 第四期课程继续补充C++课下实验内容,供学有余力同学参考使用

  5. 第六期课程补充C++20中的一些特性


显示全部
授课目标

通过这门课程,希望能够让你:

  1. 初步掌握C++的面向对象编程方法;

  2. 能初步使用 C++11/14/17 标准中 “Modern C++” 的思想写代码

  3. 了解并应用编码规范

课程大纲

第1单元:C++概览

第01节:C++编程范式与现代C++标准

第02节:学习C++:参考书和编程环境

第03节:Visual Studio集成开发环境

第04节:Eclipse CDT集成开发环境

第05节:如何快速学习本课程?

第06节:常见问题解答

第1单元测验

第1单元课前测试:C语言水平评估 (英文题目;选做)

作业1:测试你的C++编译器支持的标准

作业2:【选做】安装Eclipse For C/C++或者Eclipse CDT版本

第2单元:C++程序基础

第00节:单元导学

第01节:C++源代码和编码规范

第02节:Aloha World代码示例

第03节:名字空间

第04节:编译C++程序

第05节:处理错误

第06节:输入和输出

第2单元测验

第2单元作业1:在线编程-输入与输出

第2单元作业2:在线编程-名字空间

第3单元: C语法的增强及对应的C++11特性

第00节:单元导学

第01节:引用、[C++11]空指针与动态内存分配

第02节:数据类型与转换、[C++11]列表初始化

第03节:[C++11]自动类型推导:类型系统、auto与decltype

第04节:简化的C++内存模型

第05节:常量与指针

第06节:特殊函数:重载、默认参数值与内联

第07节:[C++11]基于范围的for循环

第08节:[C++17]带有初始化器的if和switch语句

第3单元作业1:在线编程-引用作为函数参数

第3单元作业2:在线编程-重载函数

第3单元测验

第4单元: 对象和类(基础)

第00节:单元导学

第01节:用类创建对象

第02节:对象拷贝以及分离声明与实现

第03节:对象指针、对象数组以及函数参数

第04节:抽象、封装与this指针

第05节:[C++11]类数据成员的初始化

第06节:string类以及[C++11]std::array类

第4单元测验

4.1. 在线编程-解析整数范围

4.2. 在线编程-【选做】解析有干扰字符的整数范围

4.3. 在线编程-遍历对象数组

第5单元: 对象和类(高级)

第00节:单元导学

第01节:[C++11]断言与常量表达式

第02节:代理构造、不可变对象与静态成员

第03节:析构、友元与深浅拷贝

第04节:vector类和[C++14]字符串字面量

第05节:例子

第06节:[C++17]结构化绑定

第5单元测验

5.1. 在线编程-代理构造函数1

5.2. 在线编程-代理构造函数2

第6单元: 继承和多态

第00节:单元导学

第01节:继承与构造

第02节:名字隐藏与重定义

第03节:覆写与运行时多态

第04节:抽象类与动态类型转换

第6单元测验

1. 在线编程-继承中的构造函数

2. 在线编程-继承中的析构函数和静态成员

3. 在线编程-多态和纯虚函数

Lab1

第00节:单元导学

第01节:Project 1 - Classes & Objects

第02节: Project 2 - Inheritance, Ctor, Dtor & Static Member

第7单元:文件输入输出流

第00节:单元导学

第01节:[C++17]文件系统(filesystem)

第02节:文件I/O流的基本用法

第03节:格式化输出与I/O流函数

第04节:二进制输入输出

第05节:随机访问文件

第7单元测验

7.1. 互评作业-打开关闭文件并判断文件是否存在

第8单元:运算符重载

第00节:单元导学及准备知识

第01节:运算符重载与平面向量类

第02节:重载二元运算符和数组下标运算符

第03节:重载一元运算符

第04节:重载流操作运算符与类型转换运算符

第05节:重载赋值运算符及其它总结

第8单元测验

8.1 在线编程-关系运算符重载

8.2 在线编程-数组下标运算符重载

第9单元:异常处理

第00节:单元导学

第01节:异常处理概览

第02节:异常匹配与内建异常类

第03节:自定义异常类与多重捕获

第04节:[C++11]noexcept与异常传播

第05节:重抛异常与异常的使用场景

单元作业说明

第9单元测验

1. 在线编程-创建复数类,重载流运算符

2. 在线编程-修改复数类,重载加减法运算符

3. 在线编程-在复数的运算中,练习异常处理

第10单元:模板初步

第00节:单元导学

第01节:模板与泛型编程

第02节:函数模板

第03节:排序示例与泛型化

第04节:类模板

第05节:模板参数与模板继承

第10单元测验

10.1 在线编程-创建数组类模板

第11单元:标准模板库介绍

第00节:单元导学

第01节:标准模板库基础

第02节:STL容器

第03节:STL迭代器

第04节:容器的更多用法

1. 在线编程-vector 与 sort

2. 在线编程-list与deque

Lab2

第00节: 单元导学

第01节: Project 3

第02节: Project 4

展开全部
预备知识

学过C语言,了解数据类型、分支循环、函数、数组、指针;


或者


学过Java,但需要额外补学C/C++的指针(指针定义、解引用、指针作为函数返回值和参数)


或者


学过Python,但需要额外补学C/C++的数据类型、数组、指针

证书要求

课程总评成绩各个单元的测验、作业等构成


  • 内容:单元测试(50%)、单元作业(40%~45%)、参与讨论区讨论(占总成绩5%~10%)

  • 形式:填空选择判断等客观题目、编程作业(互评)以及在线编程题目

  • 时限:在题目公布的2周左右时间内完成提交,根据具体作业要求而定



总评成绩及格(>60分)或者优秀(>80分)才能申请证书

根据课程平台最新政策,为了对学习者的在线学习过程更加严谨负责,保证平台证书权威性,自2019年9月起,本课程不再提供免费证书。


评分细节请加入课程学习后参见课程中的“评分标准”

参考资料

主要参考资料:


《C++程序设计》(中文版·第3版),[美]梁勇, 机械工业出版社, 2015年1月1日出版,ISBN:9787111485148 【https://book.douban.com/subject/3171363/】


或者


《C++程序设计》(英文版·第3版) [Introduction to Programming with C++,Third Edition],Y. Daniel Liang,机械工业出版社,2013年6月1日出版, ISBN:9787111425052 【https://book.douban.com/subject/24736736/】


【注】本课程的绝大部分C++11~C++17的新特性教学内容均由课程团队自行编写。上述参考资料中无法找到对应的内容


附加资料:

  1. 《深入理解C++11:C++11新特性解析与应用》,Michael Wong, IBM XL编译器中国开发团队,机械工业出版社,2013年

  2. 《C++程序设计语言(第1-3部分)》第四版,[美] 本贾尼·斯特劳斯特鲁普,机械工业出版社,2016年; 【726页。这本是C++他爹写的,当字典用。第4部分单独成书,352页】

  3. 《C++ Primer》第5版 中文版,[美]Stanley B. Lippman & Barbara E. Moo, 电子工业出版社,2013年  【848页。这本是大全,是“C++从入门到Java”的表率】

  4. 《C Primer Plus》第6版  中文版,[美]Stephen Prata,人民邮电出版社,2012年 【936页。这本易与上面那本混淆。但是它是讲C语言的,比上面那本易读,所以多了88页】


课程交流:

目前有4种交流渠道:

  1. 大部分问题可以在本课程的讨论区提问,这也是最便捷的方法。

  2. 可以加入课程的QQ群(177070621、250533933)。这两个群中有一些自2015年参加慕课课程学习的同学,他们会回答一些常见问题。课程负责老师会不定期在群中回复一些问题(可能响应不及时)

  3. 关注课程负责人的微信公众号,偶尔会发布一些与编程有关(不限于C++)的文章

  4. 在知乎关注课程负责人,课程负责人经常会回答一些编程类的问题
     https://www.zhihu.com/people/alohaworld/answers


显示全部
常见问题

Q1: 课程中的代码在哪里能找到?

A1:

代码都在 https://github.com/AlohaWorld/CppKid

代码不定期更新。

【注意】代码并非全部都能编译通过。其中有一些故意制造的错误用于课堂演示


Q2: 本课程只讲C++11吗?

A2:

C++11并不是完全抛弃了C++98/03的内容重启炉灶。现代C++(Modern C++,特指C++11及之后的C++) 继承了经典C++(Classic C++) 的面向对象思想、泛型编程思想。此外,从2011年开始,C++标准化委员会决定每3年推出一个新的标准。本课程中包含C++14和C++17的部分内容。本课程将跟进C++标准化委员会的进展不断更新。在本课程第2、3次开课时,将会补充C++17的更多内容,并视标准化委员会的进展和编译器的支持情况,补充C++20的内容。



北京邮电大学
1 位授课老师
崔毅东

崔毅东

副教授

推荐课程

6小时C++期末冲刺-6小时突击 C++面向对象编程

小谢老师01

11908人参加

猴博士C语言不挂科-4小时学完C语言

猴博士爱讲课

313117人参加

计算机网络期末冲刺-4小时突击计算机网络

王道论坛

17975人参加

数据结构与算法期末冲刺-5小时突击数据结构与算法

小谢老师01

25737人参加
下载
下载

下载App