2009-03-02 70 views
6

我知道C++是一门非常复杂的语言,需要多年的练习才能掌握。你会推荐什么样的项目来加快C++的速度

考虑到这一点,你是否知道一个测试所有C++主要特性(继承,指针,内存管理等)的小项目(大约1k的loc)。

事情是我是一个Java/Python程序员,我真的很想学习C++,所以我一直在研究C++一段时间,但还没有测试过我在小练习之外所学的知识。

我想把所有这些知识付诸实践。

回答

11

单独这样做,你会获得许多有害的习惯。在C++开发和培训的指导下,与拥有较高的竞争力的公司进行实习非常好。

C++就像一个没有安全别针的手榴弹 - 看起来很酷,你听说所有“真正的专业人士”都使用它,但你不知道什么时候会爆炸。大量的功能,可以用于善良或邪恶,而不知道它是真正的好还是坏。这就是为什么指导是必须的。

+0

-1他也可以在工作场所学习坏习惯。如果他已经有工作了会怎样?他没有理由不能自己学习。 – 2009-03-02 15:38:31

+0

+1从这里。当然,你也可以在工作场所学习坏习惯,但至少在那里也会遇到好习惯。如果您不知道该语言的微妙之处,并自行编写代码,那么您根本不会注意到发生的错误。 – jalf 2009-03-02 15:42:27

+0

通过编写代码和测试它来学习C++是1)不良习惯和2)错误代码的秘诀。在更紧密定义的语言中,它可以很好地工作,您可以假设如果您的代码编译完成,它是明确定义的并且合法。在C++中,程序员需要能够自己发现这些问题 – jalf 2009-03-02 15:44:35

3

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

另一个好主意是编写一个简单的数学库,支持向量矩阵等。 但是对于今天的图书馆来说,这只是学术用途。

2

取决于您想要在哪个区域工作。但是,在少于1000行代码的情况下,没有任何工作值得正确进行。

如果你打算写游戏,然后尝试写一个俄罗斯方块克隆。

如果你认为你会使用套接字等,然后写一个简单的聊天/ IRC客户端将有所帮助。

你是否有一个特定的痒,需要划伤?你最后一次认为“这很糟糕,我可以做得更好?”是什么时候?你能做得更好吗?

8

内存管理器。这应该让你思考:(!当然)

  • 自由存储管理
  • 指针
  • 继承(你会希望你的驱动程序代码中使用这个)
  • 模板(另一种方式来传递管理器周围 - 驱动程序#2)
  • 设计用户定义的数据结构(存储块)
  • 有效使用标准容器(一个或多个)
  • 算法(吨的o移动,找出空块,碎片整理)
5

我不确定任何测试全部的主要特征。有很多,有些很少一起使用(模板和虚拟功能浮现在脑海。这两种实现多态性的一种形式,所以你经常使用一个或另一个根据您的需要。)

,它会在所有重要的功能触摸一个合适的项目可能是一个显然简单的就像写一个正确的容器类,类似于std :: vector或std :: list。确保异常安全性,迭代器有效性,所有操作的适当时间复杂性以及标准中指定的每个其他要求。

这样做的问题,以及大多数其他项目,是你不会真正知道什么时候你就大功告成了。制作可调整大小的阵列可能需要50行代码,并且需要20分钟的时间。然后一个初学者会认为他已经完成了。使其异常安全需要您能够发现异常情况下类可能会被抛入不一致状态的所有地方。

这是C++的一种常见问题。 认为很容易,编译器肯定不会通知您已忘记处理的方面。所以你可能认为你的代码是完美的,但它会崩溃的各种奇怪的特殊情况。

正如锐齿说,换作乱作为C++语言,对自己编写代码是有风险的。很容易陷入“我写了一些代码,它编译并且似乎运行的陷阱”,因此它是正确的。 当然,您可以在此处或其他网站上发布您的代码以供审阅,也可以仅通过阅读用于实际高质量C++代码的文档来补充您的代码(大多数增强库往往具有全面的文档,指定了各种设计决策的基本原理,以及如何安全地处理所有倾向于在C突然出现++怪异的特殊情况。C++标准本身就是一个极好的资源,当然,在这两种情况下,这些可以帮助你确定看出来有什么问题)

4

当我学习C++时,我使用它编写自己的语言来编写巨大洞穴风格的冒险。像大多数计算机语言一样,它从未看到过白天,但它确实教会了我很多关于C++的知识。

无论你选择,以避免学习C++时就是GUI编程,这是一个陷阱,这将耗尽所有的进取心,可能教你坏C++习惯的过程。

1

我会推荐写一个俄罗斯方块克隆。 你可以学习很多C++概念,学习像SDL这样的2D库,甚至可以学习OpenGL throgh SDL。

这是一件好事,有视觉效果,并在它结束时,你可以发挥它的项目。

6

Effective C++More Effective C++

除此之外,选择你想要写一个(小?)个人项目,并做它在C++。您不会通过阅读1000行项目来学习C++。

0

一种交互式世界: 矩阵,其中每个位置可以是一个空隙或存在。 存在是一些具有几个属性的东西:年龄,剩余时间,性别,neigbor连接等。可以进行一些互动:打架,有性和孩子,有友谊等等。有些人根据他们的父亲有特殊技能(继承交易)...就像杀死能力,制作食物的能力等...... 这些互动和技能的可能结果是自我属性的变化,或者创造后代(如果可能),或者改变neigbor属性。

在每次迭代时,从控制台上的符号/数字(取决于属性等)打印矩阵,从圣经迭代0开始(您选择的初始条件......您是上帝)。

现在,你有一些真实的生活模式模拟器,并学会了一些继承,polimorfism,虚函数的类实例化等

0

我会建议一个简单的文本编辑器将是一个合理的目标。

这是一个问题域,你有一个很好的把握。

您有内存管理问题,库类重用问题(stl/curses?),指针问题以及可以使用派生类的许多选项。

对于多态性,也许可以让编辑器从键盘读取数据,或从文本文件中读取命令。

还有一个很好的....处理文件。

你不必跨平台它。你不必开源。你不必展示给任何人。你甚至不需要完成它。它可以是一个适合你的运动。

1

似乎有是两个主题,从答案来:

  1. 你需要选择,可能为了获得项目的真实经验,涉及超过1K LOC的项目。

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

你可以通过sourceforge.net的swing来注册这两个,并注册以帮助现有的C++项目。只要你不介意你的代码是开源的,你应该能够找到一个现有的项目来向经验丰富的开发人员学习,他们可以通过检查你的代码和提供指导来帮助你。

3

为了学习C++,看看很多写得很好的C++代码是很有用的。 我认为Qt库对此非常好,所以我建议:编写一个Qt应用程序。

看看他们如何使用C++并以类似的方式创建自己的图形组件。

想法: - 连接到其中一个财务网站和刮擦历史数据的股票图表查看器小部件。 - 简单的Excel,如电子表格小部件。

0

如果你从书中学习,它必须有大量经过深思熟虑的练习,你可以实施和学习。还请查看大学网站和他们的C++实验室/作业。