提问人:palm3D 提问时间:9/7/2008 最后编辑:ABDELLATIF LAGHJAJpalm3D 更新时间:7/26/2022 访问量:3119
如何教授 C++ 速成课程?[关闭]
How to teach a crash course on C++? [closed]
问:
几周后,我们将为刚从大学毕业的 Java 程序员教授 C++ 速成课程。他们对 C 或 C++ 的经验很少或根本没有经验。
本课程的前几期只有 1 或 2 个半天课程,涵盖的主题包括:
- 新的语言功能,例如
- 标头与实现
- 指针和引用
- 内存管理
- 运算符重载
- 模板
- 标准库,例如
- C 库头文件
- 基本 IOStream
- 基本 STL
- 使用库(标头、链接)
- 他们将使用 Linux,所以
- 基本 Linux 控制台命令
- GCC 以及如何解释其错误消息
- Makefile 和 Autotools
- 基本调试器命令
- 他们问的任何话题
在课程中,每个人都使用新引入的功能单独编写、编译、运行和调试简单的程序。这是最好的学习方式吗?
- 您认为哪些主题最重要?
- 应添加或删除哪些主题?
- 哪些主题无法在短时间内充分涵盖?
答:
如果它们来自 Java 世界,它们就习惯于垃圾回收。因此,我可能会花一些时间讨论智能(引用计数)指针,以及它们与垃圾回收的比较。
我只能再次指着 Stroustrup 说:不要教 C 子集!这很重要,但不适合初学者!C++ 本身就足够复杂,标准库类,尤其是 STL,比 C++ 的 C 子集更重要,并且(至少从表面上看)更容易理解。
顺便说一句,指针和堆内存分配也是如此。当然,它们很重要,但只有在教授了 STL 容器之后。
新学生必须了解的另一个重要概念是不同编译单元的概念,即一个定义规则(因为如果你不知道它,你将无法解密错误消息)和标题。这实际上是一个相当大的障碍,必须尽早突破。
除了语言功能之外,要教的最重要的事情是如何理解 C++ 编译器以及如何获得帮助。根据我的经验,获得帮助(即知道如何搜索正确的信息)是必须教授的关于 C++ 的最重要的事情。
我过去对这种教学顺序有很好的经验。
/编辑:如果你碰巧懂德语,请看一下 http://madrat.net/coding/cpp/skript,这是我的一门课程中使用的非常简短的介绍的一部分。
评论
if (name == "Fred") cout << "Willkommen" << endl;
我想我喜欢你的教程:)
nullptr
内存管理(指针、分配等)、STL 和模板的基础知识(因为 STL 使用模板)。我认为 STL 很重要,因为人们会错过 C++ 中 Java SE 类库的丰富性。
如果你打算让很多刚从大学毕业的 Java 程序员编写生产代码,我想说你应该关注的第一件事是指针和内存管理。
实际上,那些直接来自托管代码的人很少具备调试指针相关异常的技能,更不用说正确使用它了,甚至不了解他们的语言/工具如何利用它。
指针是你的思维方式,而不仅仅是编写代码。
框架和编码实践可以作为提示和注释进行教学。
但是,在编写 C 代码时不理解指针,即使不是头部,也只是在等待自己的脚。
我会花一整天的时间讨论如何用 C++ 编写一个好的类。Deitel 和 Deitel 可以作为参考。
- 何时调用构造函数?
- 何时调用赋值运算符?
- 什么时候调用析构函数?
- const Foo & a_foo的意义何在?
评论
const int & a_foo
我想补充一点,您应该确保指出他们在哪里可以找到语言和 API 参考。在 java 中,API 和语言规范触手可及,在线 java.sun.com...使用 C 或 C++,查找参考文档并不那么简单和容易。
每当我用 C 或 C++ 做某事时,这是我最大的问题......试图找到我需要的东西。我通常会求助于 cplusplus.com,它通常有我需要的东西,否则我会在谷歌上搜索它。如果您有一组您使用的参考资料(在线或以书籍的形式),请列出它们并告诉他们您使用每个参考资料的目的。
您应该花一些时间进行内存管理,尤其是 RAII。
评论