【问题标题】:How to teach a crash course on C++? [closed]如何教授 C++ 速成课程? [关闭]
【发布时间】:2010-09-08 02:08:57
【问题描述】:

几周后,我们将为刚从大学毕业的 Java 程序员讲授 C++ 速成课程。他们对 C 或 C++ 的经验很少或根本没有。

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

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

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

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

【问题讨论】:

标签: c++


【解决方案1】:

您应该花一些时间来管理内存,尤其是 RAII。

【讨论】:

    【解决方案2】:

    我会花一整天的时间讨论如何用 C++ 编写一个好的类。 Deitel & Deitel 可以作为参考。

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

    【讨论】:

    • 那么,在您看来,const int & a_foo 的意义是什么?提示:没有。
    【解决方案3】:

    我想补充一点,您应该确保指出他们可以在哪里找到语言和 API 参考。在 java 中,API 和语言规范在 java.sun.com 上在线触手可及……使用 C 或 C++,查找参考文档并不那么简单和容易。

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

    【讨论】:

      【解决方案4】:

      如果你打算让很多 Java 程序员大学毕业来编写生产代码,我想说你首先应该关注的是指针和内存管理。

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

      指针是您思考的方式,而不仅仅是编写代码。

      框架和编码实践可以作为提示和注释传授。

      但是在编写 C 代码时无法理解指针,如果不是头部的话,就是在等着打自己的脚。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

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

          除了语言特性之外,最重要的要教的是如何理解 C++ 编译器以及如何获得帮助。根据我的经验,获得帮助(即知道如何搜索正确的信息)是 C++ 中必须教授的最重要的事情。

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

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

          【讨论】:

          • if (name == "Fred") cout << "Willkommen" << endl; 我想我喜欢你的教程 :)
          • @FredOverflow:我认为由于他们来自 Java 背景,因此已经以与 C++ 不太相似的方式熟悉 OOP,因此在 C 子集上花费了一些时间,并且指针、动态内存分配等基础知识正是我们所需要的。
          • (续)指针确实有它们的位置。但不是在 C++ 课程的开始。
          • +1 用于指针注释。我目前正在开发一个玩游戏的 AI 项目,我相信我的程序中只有一个地方有指针。我用它们来指示哪个玩家肯定会先走(nullptr,如果两者的可能性相同),所以即使那样,它们也不是资源管理指针(我的实际对象最终存储在堆)。然而,我越想越意识到这是一个糟糕的设计,我会通过使用某种矢量解来指示多级回合顺序来解决游戏中更普遍的问题。
          • 指针通常似乎是解决某事的最佳方案,但我发现实际的最佳解决方案往往是根本不使用间接,或使用引用,或完全使用其他东西。我在这篇文章中概述了我认为的“如何创建对象”层次结构:stackoverflow.com/questions/10169283/…
          【解决方案7】:

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

          【讨论】:

            猜你喜欢
            • 2011-01-20
            • 1970-01-01
            • 2010-12-07
            • 1970-01-01
            • 2020-02-19
            • 1970-01-01
            • 1970-01-01
            • 2011-02-25
            • 2010-09-21
            相关资源
            最近更新 更多