您推荐我用哪个项目来快速掌握C++?

5
我知道C++是一门非常复杂的语言,需要多年的实践才能掌握。考虑到这一点,您是否知道一个小项目(大约1k行代码),可以测试所有C++的主要特性(继承、指针、内存管理等)。
问题在于我是一名Java/Python程序员,但我真的想学习C++,所以我已经学习了一段时间的C++,但除了一些小练习之外,我还没有测试过我所学的任何东西。
我想把所有的知识都付诸实践。
13个回答

10

独自学习C++容易养成许多不良的习惯。最好是在一家具有高水平C++开发技能的公司实习,并在指导下接受培训。

C++就像没有安全销的手榴弹,看起来很酷,而且你听说所有“真正的专业人士”都在使用它,但你不知道何时会爆炸。拥有大量可以用于好或坏的功能,如果不知道是否真的好还是坏,那么指导就必不可少了。


他在工作场所也可能学到不良习惯。如果他已经有了一份工作怎么办?他完全可以自己学习,没有任何理由不这样做。 - Tim Frey
从这里开始+1。当然,你也可以在工作场所学习到不良习惯,但至少那里有可能遇到好的习惯。如果你不了解语言的微妙之处,并且独自编写代码,那么你就无法注意到出现的错误。 - jalf
仅通过编写代码和测试来学习C++会养成不良习惯和含有缺陷的代码。在更加严格定义的语言中,这种方法可能会起到一定的作用,因为您可以假设如果您的代码编译通过,那么它就是明确且合法的。但在C++中,程序员需要自己能够发现这些问题。 - jalf
它根本没有回答问题。 - Ed S.
+1,此答案提供了实现问题提问者目标的一个好的选择。 - Balázs Édes
显示剩余4条评论

8

一种内存管理器。这应该让你想到以下内容:

  • 自由存储管理
  • 指针(当然!)
  • 继承(你会希望你的驱动程序代码使用它)
  • 模板(另一种传递管理器的方式 - 驱动程序 #2)
  • 设计用户定义的数据结构(一个内存块)
  • 有效使用标准容器
  • 算法(移动、找出空块、碎片整理等)

我会尝试接手这个项目,但我也会遵循Sharptooth的建议并尝试在某个真正擅长C++开发的人或团队的指导下开始编写代码。完成后,我还要请某人审核我的项目。 - tatsuhirosatou
太好了!把你的项目放在 code.google.com 或 github 或一些公共服务器上 - 你永远不知道会有多少人感兴趣! - dirkgently

6

5
我不确定有什么可以测试所有主要功能的东西。有很多功能,有些很少一起使用(例如模板和虚函数。两者都实现了一种形式的多态性,因此您通常根据需要使用其中之一。)
一个适当的项目应该触及所有重要的功能,可能是编写一个正确的容器类,类似于std::vector或std::list。确保异常安全、迭代器有效性、所有操作的适当时间复杂度以及标准中指定的每个其他要求。
这个问题以及大多数其他项目的问题在于,你不会真正知道何时完成。制作可调整大小的数组可能需要50行代码和20分钟的时间。然后初学者会认为他完成了。使它具有异常安全性要求您能够发现所有可能通过异常使类进入不一致状态的地方。
这是C++的一种普遍问题。你可能认为你的代码完美无缺,但编译器肯定不会通知你忘记处理的方面。所以你可能认为你的代码是完美的,但它会因各种奇怪的特殊情况而崩溃。
正如sharptooth所说,对于像C++这样混乱的语言,独自编写代码是有风险的。很容易陷入“我已经编写了一些代码,它可以编译并且似乎运行良好。因此它是正确的”陷阱。
当然,您可以在这里或其他网站上发布您的代码进行审查,或者仅通过阅读文档来补充您的编码,以获取实际高质量的C++代码(大多数boost库往往具有全面的文档,指定各种设计决策的基础,并说明如何安全地处理在C++中经常出现的所有奇怪的特殊情况。当然,C++标准本身也是另一个优秀的资源。在任一情况下,这些都可能帮助您确定要注意哪些问题)。

4

当我学习C++时,我使用它编写了自己的语言,用于编写类似于“巨型洞穴”风格的冒险游戏。像大多数计算机语言一样,它从未见过天日,但它确实教会了我很多关于C ++的知识。

无论你选择什么,学习C++时需要避免的是GUI编程,这是一个陷阱,会耗尽你所有的勇气,并可能在此过程中教你不良的C++习惯。


1
关于GUI编程的说法是正确的。不要去学习它,因为它对C++编程没有任何帮助,而且使用起来总是很麻烦。 - jalf
1
关于GUI编程的绝对真实,没有什么比在C++中编写GUI程序更能腐蚀你的思想了。 - Naveen

3

我建议创建一个基于文本的游戏,这真的帮助我巩固了我的C++。不需要花费太长时间,你可以练习所有你想要的功能,自己想出游戏规则会更有趣。

另一个很好的主意是编写一个简单的数学库,支持向量、矩阵等等。但是,现在有了今天的库,这只有学术用途。


3
为了学习C ++,查看大量编写良好的C ++代码非常有用。 我认为Qt库非常适合此目的,因此建议:编写一个Qt应用程序。
观察他们如何使用C ++,并以类似方式创建自己的图形组件。
想法: - 股票图表查看器小部件,连接到金融网站之一并获取历史数据。 - 简单的类似Excel的电子表格小部件。

2

取决于你想从事哪个领域。但是,没有什么值得做的东西代码行数不超过1000行。

如果你想写游戏,那么可以尝试编写俄罗斯方块克隆版。

如果你认为自己会使用套接字等技术,那么编写一个简单的聊天/IRC客户端会有所帮助。

你是否有特定的需求需要解决?上一次你觉得“这很烂,我可以做得更好”是什么时候?你能做得更好吗?


但是,值得正确完成的事情不可能少于1000行代码。-- 哎呀,我希望你并不真的相信这一点。我见过一些非常优雅的算法或问题解决方案,甚至不到100行,更别说1000行了。 - mmcdole
这取决于“值得做”的定义。很多非常有用且“值得做”的实用函数和类可以在不到1000行的代码中完成。但是,编写少于1000行代码的值得做的应用程序可能更难找到。 - jalf
代码行数对于错误使用C++中的误解概念所带来的痛苦程度影响甚微。 - sharptooth

1
我推荐写一个俄罗斯方块的克隆版。 通过这个项目,您可以学习许多C++概念,并学习2D库,例如SDL或甚至是通过SDL学习OpenGL。
拥有一个具有可视化结果的项目总是很好的选择,在完成后您可以玩它。

1

从答案中似乎有两个主题:

  1. 您需要选择一个可能涉及超过1K LOC的项目,以获得项目的真实体验。

  2. 您还需要与经验丰富的C++开发人员合作,他们可以帮助您思考问题并避免与语言相关的陷阱。

您可以通过访问sourceforge.net并注册以帮助现有的C++项目来解决这两个问题。 只要您不介意您的代码是开源的,您就应该能够找到一个现有的项目来学习,并且有经验的开发人员可以通过审查您的代码并提供指导来帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接