如何教授 C++ 速成课程?[关闭]

How to teach a crash course on C++? [closed]

提问人:palm3D 提问时间:9/7/2008 最后编辑:ABDELLATIF LAGHJAJpalm3D 更新时间:7/26/2022 访问量:3119

问:

闭。这个问题是题外话。它目前不接受答案。

想改进这个问题吗? 更新问题,使其符合 Stack Overflow 的主题

10年前关闭。

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

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

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

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

  1. 您认为哪些主题最重要?
  2. 应添加或删除哪些主题?
  3. 哪些主题无法在短时间内充分涵盖?
C++语言

评论

0赞 Ben I. 6/3/2017
这将是 cseducators.stackexchange.com 的主题(尽管由于它仍处于私人测试阶段,因此最容易通过此处输入 area51.stackexchange.com/proposals/92460/......)

答:

6赞 Rob Rolnick 9/7/2008 #1

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

22赞 Konrad Rudolph 9/7/2008 #2

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

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

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

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

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

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

评论

1赞 fredoverflow 1/6/2011
if (name == "Fred") cout << "Willkommen" << endl;我想我喜欢你的教程:)
0赞 haziz 4/29/2012
@FredOverflow:我认为,由于他们来自Java背景,因此已经习惯于OOP,其方式与C++并无太大区别,因此花一些时间在C子集和指针的基础知识、动态内存分配等上正是所需要的。
1赞 Konrad Rudolph 4/29/2012
(续)指针确实有其位置。但不是在 C++ 课程开始时。
0赞 David Stone 5/5/2012
+1 表示指针注释。我目前正在做一个游戏人工智能的项目,我相信我的程序只有一个位置的指针。我用它们来指示哪个玩家肯定会先走(如果两者的可能性相同),所以即使这样,它们也不是资源管理指针(我的实际对象最终存储在堆栈上类内的映射中)。然而,我考虑得越多,我就越意识到这是一个糟糕的设计,我会通过使用某种向量解决方案来解决游戏中一个更普遍的问题,以指示多个级别的回合顺序。nullptr
0赞 David Stone 5/5/2012
指针通常似乎是某些事情的最佳解决方案,但我发现实际的最佳解决方案往往是根本不使用间接,或者使用引用,或者完全使用其他东西。在这篇文章中,我概述了我认为是“如何创建对象”的层次结构:stackoverflow.com/questions/10169283/......
3赞 axk 9/7/2008 #3

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

4赞 chakrit 9/8/2008 #4

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

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

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

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

但是,在编写 C 代码时不理解指针,即使不是头部,也只是在等待自己的脚。

3赞 Eugene Yokota 9/8/2008 #5

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

  • 何时调用构造函数?
  • 何时调用赋值运算符?
  • 什么时候调用析构函数?
  • const Foo & a_foo的意义何在?

评论

1赞 Konrad Rudolph 9/8/2008
那么,在你看来,有什么意义呢?提示:没有。const int & a_foo
4赞 Mike Stone 9/8/2008 #6

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

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

0赞 Alexandre Hamez 3/18/2010 #7

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