什么时候开始学习c++

When to Start Learning C++

本文关键字:c++ 学习 开始 什么时候      更新时间:2023-10-16

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

如果我应该继续使用c++,这里的问题是…我应该从哪里开始呢?我看过的大多数教程(内存池、XML解析等)都是我无法理解的东西。

我也只运行Linux,所以就任何。net而言,它几乎仅限于MonoDevelop 2.4。

我认为,学习一门新语言的最佳方法是"业余项目"。

你会犯错误,你的代码会一团糟,当你回头看你的烂摊子时,你会意识到你应该把所有的东西都扔掉。但是,你对每一个增量功能都很兴奋,你喜欢这个"宠物项目",以至于你可以想象它的雏形。它可以作为一个很好的"稻草人"模型,作为外部可观察的特征,当你再次启动它时,它是一个有用的系统。

对于c++,编写一个程序来转换音乐的上下缩放。生成一个角色扮演游戏角色。创造一款文字冒险游戏。有无数的选择,但如果你想学习语言,而不是GUI库,那么我建议使用命令行处理工具。

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

[UPDATE]再一次,我的偏见,但恕我直言,如果你正在学习c++,那就学习c++。您可能不希望现在就开始使用标准模板库(STL)。迭代器很奇怪,你必须把你的大脑从"典型的"面向对象模型中调转过来才能使用它们。它们在数学上是"优雅的",但它们不是非常面向对象的。是的,继续使用std::vector<>(因为您不应该编写自己的vector),但它应该是实际执行某些操作的"真正"类中的"数据成员"。例如,class MyGame可以有一个或多个数据成员,可能是std::vector<Player*>std::vector<GameBoardSquare*>。(目标是用你写的"真正的"类来包装std::vector<>,你的"真正的"类代表你的逻辑问题域。)

当你来自Java和c#时,c++很难,因为它是非托管的,与托管语言相比,它有一个完全不同的执行模型。

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

其中一个例子就是STL容器。您可以使用迭代器访问这些容器(就像类固醇上的指针),但是对于迭代器何时失效有非常挑剔的规则。例如,如果使用vector,任何时候必须展开vector,所有现有的vector迭代器都失效,不能再使用。经验丰富的c++程序员对这些规则了如指掌,但对于一个新手来说,这是一个陡峭的学习曲线。

换句话说,你还有很多东西要学。如果您想学习非托管编程,这是值得学习的,但决定权在您。:-)

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

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

简而言之,你基本上已经知道c++的语法了。从这个意义上讲,从Java切换到c++不会花太多时间。每种编程语言都只是一种工具。当你需要挖掘的时候,你带着一把铲子。

我觉得我真的准备好迈出下一步了。

这个"下一步"取决于你想去哪里。如果你想更深入地钻研游戏编程、操作系统开发、嵌入式系统,想更接近处理器的金属,或者只是想学习一些其他语言来扩大你的知识范围,那么学习c++是一个很好的下一步。但是,如果"下一步"你想要走向桌面开发,服务器编程,web编程等,那么c++可能不是最好的选择。如果你知道你想去哪里,我们可能会给你更多相关的帮助。如果你不知道你想用什么语言,我们就不能告诉你你想用什么语言。

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

c++和java/c#之间最大的区别之一是你需要更详细一些,而事情往往不那么抽象。然而,这正是使c++成为今天的样子的原因。如果你使用c++并添加一些内存安全带,并添加一些面向对象的概念(接口、最终类、泛型等),你基本上就会得到类似于Java的东西。是的,这是一种过度简化,它忽略了程序如何编译和执行的差异,但这是在开始时考虑它们的好方法。

换句话说,你曾经坐在驾驶座上开车。你仍然可以快速有效地到达你想去的地方,你想在车里做的正常事情已经为你提供了。现在,你仍然在驾驶这辆车,但是所有的部件都暴露在外。现在您有了更多的控制,并且可以做许多Java不允许您做的新事情。你必须对如何协调汽车的各个部分有更多的了解,但一旦你知道了如何才能跑得更快(因为你的工作效率更高,所以电脑的表现会更好)。这不是一个完美的类比,但它给了你一个概念。你在学习使用它的过程中会遇到一些障碍,但是一旦你掌握了你被赋予的新能力,你就会成为一个更好的程序员,对计算机的理解也会更深。

我应该从哪里开始?

我只想要一本c++编程入门的书。所有的材料你都应该很熟悉,这样你就能专注于语法和那些让你困惑的东西。一旦你完成了这些,你就可以进入更高级的东西了。我听说过很多关于加速c++的好东西,最重要的是它有350页,但包含了600多页的书的细节。

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

查看QT:

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

您首先需要掌握基础知识,但是,它将允许您快速进入由于输出而感觉更高级的东西。QT支持Linux、Mac和Windows。它允许创建跨平台和使用本地操作系统。QT是c++的一个库,尽管它足够简单,如果需要的话,一个人可以从QT开始学习c++。