如何在C ++上教授速成课程?

时间:2020-03-05 18:48:59  来源:igfitidea点击:

几周后,我们将为刚从大学毕业的Java程序员讲授C ++速成班。他们几乎没有C或者C ++的经验。

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

  • 指针和参考
  • 内存管理
  • 运算符重载
  • 范本
  • 基本的iostream
  • 基本STL
  • 使用库(标题,链接)
  • gcc以及如何解释其错误消息
  • Makefile和自动工具
  • 基本调试器命令
  • 他们问的任何话题

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

我们认为哪些主题最关键?
应该添加或者删除哪些主题?
短时间内无法充分涵盖哪些主题?

解决方案

回答

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

回答

我只能再一次指出Stroustrup并进行宣讲:不要教C子集!这很重要,但对于初学者而言并不重要! C ++本身已经足够复杂,并且标准库类(尤其是STL)比C ++的C子集更为重要,并且(至少从表面上)更易于理解。

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

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

除了语言功能外,最重要的要教的是如何理解C ++编译器以及如何获得帮助。就我的经验而言,获得帮助(即知道如何搜索正确的信息)是有关C ++的最重要的一件事。

过去,我在这种教学顺序方面有相当不错的经验。

/编辑:如果我们碰巧知道任何德语,请访问http://madrat.net/coding/cpp/skript,这是我的一门课程中使用的非常简短的介绍的一部分。

回答

内存管理(指针,分配等),STL和模板的基础(因为STL使用模板)。我认为STL很重要,因为人们可能会错过C ++中Java SE类库的丰富性。

回答

如果我们打算让很多Java程序员直接从大学毕业来编写生产代码,那么我想说的我们应该关注的第一件事是指针和内存管理。

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

Pointers is how you think not just write code.

框架和编码实践可以在整个过程中作为提示和注释来教。

但是在编写C代码时无法理解指针只是在等待自己的脚步(如果不是头部的话)。

回答

我将花一整天的时间讨论如何用C ++编写好的类。 Deitel&Deitel可为我们提供参考。

  • 什么时候调用构造函数?
  • 什么时候调用赋值运算符?
  • 什么时候调用析构函数?
  • const Foo和a_foo有什么意义?

回答

我想补充一点,我们应该确保指出他们在哪里可以找到语言和API参考。在Java中,使用C或者C ++可以在线访问java.sun.com上的API和语言规范,它并不是那么容易和容易找到参考文档。

每当我用C或者C ++做某事时,这就是我最大的问题...试图找到我需要的东西。我通常会转到cplusplus.com,通常会提供我需要的东西,否则我会用谷歌搜索它。如果我们使用了一组参考(在线或者以书的形式),请列出它们并告诉他们我们将每个参考用于什么目的。

回答

我们应该花一些时间进行内存管理,尤其是RAII。