何时开始学习C ++

时间:2011-07-19 22:34:29

标签: c++

我用Java和C#编写了大约4-5个月的编码。很棒的语言,但我觉得我已经准备好迈出下一步了。我急于开始学习c ++,而且我已经开始学习c ++了,但我确实很难接受它。在使用它时,学习和完成任何事情确实需要付出更多的努力,我觉得我真的无处可去。我该怎么办?我应该继续使用Java编程吗?如果是这种情况,请给出一个很好的理由:我真的很想学习C ++,因为它迫使我去做,以及我在这个过程中可以学到的东西。

如果我 继续使用C ++,那么这里的问题是......我应该从哪里开始?我一直在研究的大多数教程(Memory Pools,XML Parsing等)都是我脑海中浮现的东西。

我也只运行Linux,因此就任何.NET而言,它几乎仅限于MonoDevelop 2.4。

5 个答案:

答案 0 :(得分:8)

恕我直言,学习新语言的最佳方式是“宠物项目”。

你会犯错误,你的代码会变得一团糟,你会回顾你的烂摊子,并意识到你应该把整件事扔掉。但是,您对每个增量功能感到兴奋,并且您喜欢“宠物项目”,以至于您可以想象它的形状。它可以作为一个好的“稻草人”模型,作为外部可观察的特征,是一个有用的系统,当你再次启动它。

对于C ++,编写一个可以上下翻译音阶的程序。生成角色扮演游戏角色。创建一个文本冒险游戏。有数以万计的选项,但如果你想学习语言,而不是GUI库,那么我将继续使用命令行处理工具。

恕我直言,C ++是思考计算机如何工作的好方法,并且每个设计选项都可供您使用。我经常使用多种语言,但C ++是我最喜欢的语言之一,所以我会(偏见)建议你继续学习C ++。

[更新]再次,我的偏见,但恕我直言,如果你正在学习C ++,那么学习C ++。您可能不想立即开始使用标准模板库(STL)。迭代器很奇怪,你必须将你的大脑从“典型的”面向对象模型中转移出来才能使用它们。他们是“数学上优雅的”,但他们不是非常面向对象,恕我直言。是的,继续使用std::vector<>(因为你不应该编写自己的vector),但这应该是实际做某事的“真实”类中的“数据成员”。例如,class MyGame可以包含一个或多个数据成员,例如std::vector<Player*>std::vector<GameBoardSquare*>。 (目标是将std::vector<>与您编写的“真实”类包装在一起,其中“真正的”类代表您的逻辑问题域。)

答案 1 :(得分:6)

当你来自Java和C#时,C ++很难,因为与托管语言相比,它具有完全不同的执行模式。

例如,您不需要依靠垃圾收集器为您拾取未使用的对象,而是需要使用智能指针,以便跟踪删除对象的时间。此外,对象删除的概念(更一般地说,对象具有特定的,有限的生命周期,与大多数托管语言不同)意味着您必须知道对象何时被释放或无效且无法再次触摸。

这方面的一个例子是STL容器。您可以使用迭代器访问这些容器(想想类固醇的指针),但是有关迭代器何时失效的非常挑剔的规则。例如,如果使用vector,则只要向量必须展开向量,所有现有的迭代器都将失效,不能再使用。经验丰富的C ++程序员知道这些规则就像他们手中的背部一样,但对于新手而言,这是一个陡峭的学习曲线。

换句话说,你有很多学习知识。如果你想进入非托管编程,它的学习值得拥有,但决定权归你所有。 : - )

答案 2 :(得分:1)

  

我觉得我已经准备好迈出下一步了。

这个“下一步”取决于你想去的地方。如果你想深入研究游戏编程,操作系统开发,嵌入式系统,想要更接近处理器的金属,或者只是想学习一些其他语言来拓宽你的知识范围,那么是的,学习C ++是一个很好的下一步。 但是,如果您想要采用的“下一步”是桌面开发,服务器编程,Web编程等,那么C ++可能不是最佳选择。如果您知道自己想去哪里,我们可能会为您提供更多相关帮助。如果您不知道自己想要什么,我们无法告诉您想要使用的语言。

  

使用它时学习和完成任何事情确实需要付出更多的努力

C ++和java / C#之间的一个重大区别是你需要更加冗长,事情往往略微抽象。但是,这就是使C ++成为现实的原因。如果您使用C ++并添加了一些内存安全带并且已经出现了几个面向对象的概念(接口,最终类,泛型等),那么您基本上会得到类似Java的东西。是的,这是一个过于简单化,它忽略了程序编译和执行方式的差异,但它是一开始就考虑它们的好方法。

换句话说,你曾经驾驶过一辆汽车。您仍然可以快速有效地到达您想要的位置,并且已经为您提供了您想要在汽车中做的正常事情。现在,你仍在开车,但是所有的零件都暴露在外。你现在有了一个很多更多的控制权,可以做许多Java不允许的新事物。您必须更多地了解协调汽车所有不同部分的情况,但一旦您知道如何更快地完成任务(从计算机获得更好的性能,因为您正在更有效地做事)。这不是一个完美的类比,但它给你的想法。你有一些速度障碍学习使用它,但是一旦掌握了你已经获得的新功能,你将成为一个更好的程序员并更深入地了解计算机。

  

我应该从哪里开始?

我将介绍使用C ++的编程书籍。所有这些材料都应该让您熟悉,因此您将能够专注于绊倒您的语法和事物。一旦你通过,你可以继续前进更先进的东西。 I've heard many good things about Accelerated C++,不仅仅是它的350页,而是包含600多页书的详细信息。

祝你好运! (如果您有任何疑问,请不要忘记我们总是在这里:D)

答案 3 :(得分:1)

首先,您应该回答一个简单的问题:为什么我需要学习C ++?你会更好地考虑学习概念而不是语言。你对OOP已经足够好了吗?也许是时候了解设计模式了?还是函数式编程?

另一点是你应该区分学习语法和框架/标准库。 C ++非常灵活,低级,虽然它有很多很好的编写库。但是,每当我需要进行一些xml处理而不是C ++时,我最好选择Java或Python。

简而言之,您基本上已经了解了C ++的语法。从这个意义上说,从Java切换到C ++不会花费太多时间。每种编程语言都只是一种工具。当你需要挖掘时,你需要挖掘。当你需要打洞时,你需要进行练习。

答案 4 :(得分:0)

了解QT:

http://qt.nokia.com/products/

您首先需要掌握基础知识,但是,它可以让您快速进入因输出而感觉更先进的东西。 QT支持Linux,Mac和Windows。它还允许创建跨平台并使用本机操作系统。 QT是一个C ++库,虽然它很简单,如果需要,可以开始用QT学习C ++。

相关问题