如何教C ++速成课程?

如何教C ++速成课程?

How to teach a crash course on C++?

几周后,我们将直接在大学里为Java程序员教授一门速成课程。他们很少或没有经验,但C或C++。

本课程之前的版本仅为1或2个半天的课程,涵盖的主题包括:

  • 新的语言功能,例如
    • 标题与实现
    • 指针和引用
    • 内存管理
    • 运算符重载
    • 模板
  • 标准库,例如
    • C库标题
    • 基本流
    • 基本STL
  • 使用库(标题、链接)
  • 他们将使用Linux,所以
    • 基本Linux控制台命令
    • GCC以及如何解释其错误消息
    • 生成文件和自动工具
  • 基本调试器命令
  • 他们问的任何话题

在课程中,每个人使用新引入的功能分别编写、编译、运行和调试简单的程序。这是最好的学习方式吗?

你认为哪些主题最重要?应添加或删除哪些主题?哪些主题在短时间内无法充分涵盖?


我只能再一次指向stroustrup和布道:不要教C子集!这很重要,但不适合初学者!C++是足够复杂的,并且标准库类,尤其是STL,比C++的C子集更为重要和(至少表面上)更容易理解。

顺便说一下,指针和堆内存分配也是如此。当然,它们很重要,但只有在教过STL容器之后。

另一个重要的概念是新学生必须了解不同的编译单元、一个定义规则(因为如果你不知道它,你就无法解密错误消息)和头。这实际上是一个相当大的障碍,必须尽早突破。

除了语言特点外,最重要的事情是如何理解C++编译器和如何获得帮助。在我的经验中得到帮助(即知道如何搜索正确的信息)是关于C++的最重要的事情。

我过去对这种教学顺序有过相当好的经验。

/编辑:如果你碰巧认识一个德国人,请看一下http://madrat.net/coding/cpp/skript,这是我的一门课程中使用的非常简短的介绍的一部分。


如果它们来自Java世界,则用于垃圾回收。因此,我可能会花一些时间讨论智能(引用计数)指针,以及它们与垃圾收集的比较方式。


我想补充一点,您应该确保指出在哪里可以找到语言和API引用。在Java中,API和语言规范在Java.Sun.com上是在线的。用C或C++,它不是那么简单和容易找到参考文献。

每当我在C或C++中做某事时,那是我最大的问题…试图找到我需要的。我通常求助于cplusplus.com,它通常有我需要的,否则我会用谷歌搜索。如果你有一套你使用的参考资料(在线或以书籍的形式),列出它们并告诉他们你使用每个参考资料的目的。


如果你打算把很多Java程序员直接从大学里写出生产代码,我会说你首先要关注的是指针和内存管理。

实际上,那些直接来自托管代码的人很少有调试与指针相关的异常的技能,更不用说正确地使用它,甚至不知道他们的语言/工具是如何使用它的。

Pointers is how you think not just write code.

框架和编码实践可以作为提示和注释进行教学。

但是,在编写C代码时,如果不理解指针,那就只是在等着射自己的脚,如果不是头部。


我会花一整天的时间来讨论如何在C++中编写一个好的类。DEITEL&DEITEL可作为参考。

  • 何时调用构造函数?
  • 何时调用赋值运算符?
  • 何时调用析构函数?
  • const foo&a foo有什么意义?

内存管理(指针、分配等)、STL和模板的基础知识(因为STL使用模板)。我认为STL很重要,因为在C++中缺少了JavaSE类库的丰富性。


你应该花点时间来管理内存,尤其是RAII。


推荐阅读

    linux重新链接库命令?

    linux重新链接库命令?,代码,软件,平台,产品,电脑,系统,入口,市场,工业,通信,l

    linux链接远程命令?

    linux链接远程命令?,系统,地址,网络,密码,软件,名称,工具,服务,电脑,认证,如

    linux命令行链接网络?

    linux命令行链接网络?,网络,系统,地址,工作,工具,最新,网址,数据,信息,环境,l

    linux动态链接库命令?

    linux动态链接库命令?,代码,项目,工程,电脑,网上,文件,程序,静态,命令,目录,

    linux取消链接命令行?

    linux取消链接命令行?,工具,状态,环境,数据,命令,文件,终端,模式,指令,界面,l

    linux删除硬链接命令?

    linux删除硬链接命令?,工作,数据,系统,信息,链接,命令,设备,名称,不了,概念,l

    linux创建软链接命令?

    linux创建软链接命令?,工作,地址,位置,系统,信息,管理,服务,名字,链接,文件,

    linux中软链接命令?

    linux中软链接命令?,位置,设备,数据,信息,系统,文件,链接,地址,对比,源文件,L

    linux命令链接网页?

    linux命令链接网页?,网络,信息,系统,网址,工具,网站,状态,发行,数据,命令,Lin

    linux软链接命令用法?

    linux软链接命令用法?,时间,系统,位置,服务,链接,数据,地址,基础,不了,信息,L

    linux目录链接命令?

    linux目录链接命令?,系统,工作,时间,地址,数据,信息,管理,目录,文件,命令,请

    linux命令创建硬链接?

    linux命令创建硬链接?,数据,链接,系统,文件,位置,概念,不了,源文件,目录,命

    linux内存管理命令?

    linux内存管理命令?,系统,等级,工作,信息,命令,基础,地址,情况,管理,标准,Lin

    linux复制链接命令?

    linux复制链接命令?,系统,认证,文件,命令,目录,源文件,选项,目标,功能,语法,L

    linux下软链接命令?

    linux下软链接命令?,位置,地址,信息,工作,设备,系统,文件,链接,命令,源文件,

    linux链接网络命令?

    linux链接网络命令?,系统,网络,工作,信息,设备,管理,名字,地址,命令,标准,Lin

    pythonpython中有指针吗

    pythonpython中有指针吗,入口,地址,培训,位置,标准,代码,函数,指针,对象,变