【问题标题】:Learning C++ right?学习 C++ 对吗?
【发布时间】:2011-01-05 21:18:25
【问题描述】:

由于过去我主要使用脚本语言,但现在想达到“高性能”水平,所以前段时间我决定学习 C++。

我看了一些“初学者”教程,买了一本 O'reilly C++ 袖珍参考书(真的很有帮助)。我的问题是我现在了解所有基础知识,但还不足以编写更复杂的游戏。

  • 我是否必须获得一本厚厚的 C++ 书籍才能进一步学习?
  • 我将主要在 Windows 上使用 C++。除了 Win32,还有哪些 API 对我很重要?
  • 我的目标是为我曾经使用过的一种编程语言编写一个小型解释器 - 我已经在几种脚本语言中实现了这一点,我需要 C++ 中的哪些 API/库知识来编写一个?

【问题讨论】:

    标签: c++


    【解决方案1】:

    我一直发现从书本上学习一门语言是相当困难的,在你了解了基础知识之后,你应该开始编程。因此,我不会阅读厚厚的手册,而是查看 http://www.cprogramming.com/tutorial.html#advanced 之类的内容,或者只是 google 获取 c++ 教程以及您想尝试制作的内容。

    【讨论】:

    • 你应该避免所有像瘟疫一样的在线 C++ 教程——它们都被误导或完全错误。
    • @Neil:有点强。几个教程中都有好点,但我同意信噪比很低 - 甚至是负面的,有很多积极有害的建议。
    • 你只需要找到一些好的。和书一样,不是所有的都是完美的。关键是要研究一些现实生活中的例子。读了足够多的书之后,如果不去实践和尝试,你真的一无所获。
    【解决方案2】:
    1. 你不需要一本厚书——你需要一本好书。获取Accelerated C++,由原 C++ 开发团队的两名成员 Koenig & Moo 编写。

    2. 取决于你想做什么。

    3. 您不需要任何东西 - 只需使用 C++ 标准库,您就可以编写出完美的解释器或编译器。请参阅此SO question 了解有关该领域的大量信息。

    【讨论】:

    • 我也会立即推荐有效的 C++ 和有效的 stl。
    • 我喜欢他们对那本书的引用:“任何人只要阅读这本书并完成示例和练习,就会拥有与许多专业程序员相同的技能”。可悲的是,这并没有说太多。 :-)
    【解决方案3】:

    对于 Windows 上的 C++,一定要学习 Microsoft Foundation Classes (MFC)。如果没有 MFC,您必须自己实现所有 Windows API 的东西,这比 C++ 更多,而且会很痛苦。

    您可能还想获取、学习和使用boost C++ 库。它们不是特定于 Windows 的,但它们对任何人来说都是一个很好的资源。

    【讨论】:

    • MFC 是死技术。如果您确实想编写 Windows GUI,请使用 Qt 或放弃 C++ 并使用 C#。
    • 必须注意(我知道,你知道,Neil),熟悉 Qt 可以让您开发跨平台的 gui 应用程序,我认为这可以说是尽可能少的努力(假设,我们在这里只讨论 c++)。
    • @Neil:更直接的替代品是 WTL(最近被 Chrome 选择),我想由于接口不匹配,Windows 支持的一些奇怪/有趣的功能在 Qt 中会更难使用。当然,我自己滚动,所以我知道什么。 :)
    【解决方案4】:
    • Koenig 和 Moo 的《Accelerated C++》是一本很好的(和)薄薄的 C++ 入门书籍。
    • 我主要是在 Linux 下做编程,但听说 MFC 有很多不好的地方,所以我会尝试寻找不同的 GUI 库。
    • 一旦您熟悉了 C++ 语法中一些更复杂的部分,请查看用于解析器生成的 Boost.Spirit 库。各种 Boost 库为标准库提供了一些非常有用的扩展。

    【讨论】:

      【解决方案5】:

      老实说,在学习 C++ 的过程中,我从来没有拿起过一本书(请不要发火)。我能给出的最佳建议是转到this page 并阅读教程。它涵盖了 C++ 语言的大部分内容(阅读:最常用的功能),并使其尽可能简单。就重要的 API 而言……嗯,这是一个偏好问题。没有一个工具包/api 真正“赢过”,但 Qt、GTK-- (gtkmm) 和 wxWidgets 都是大玩家。除了 GUI,您可能还想学习原始的 winsock2 和线程 API 或 boost 库的线程和网络接口。我确实同意 MFC 正在消亡,并且对于仅限 Windows 的开发,C# 正在发挥越来越大的作用(即使在 linux/mono C# 上也开始流行起来......慢慢地)。

      此外,学习一门语言的最佳方式是编写代码。因此,不要只阅读大量内容——没有实践经验,你永远不会学习这门语言。提出问题,回答你能回答的问题,并为自己编写教程——如果没有其他人的话。把你学到的东西写下来是一个很好的参考,把你脑子里的所有东西都理顺,以一种别人可以单独理解的方式写下来的过程是强化概念的好方法。我发现学习编程的最佳方式是帮助其他人解决问题。

      @Neil- 我不同意在线教程“完全错误”。如果有的话,他们教给你的风格可能是面向可读性而不是优化的——在我看来,这是一个优势。根据我有限的经验,我发现 cplusplus.com 几乎是所有内容的首选参考。

      具体来说,回答您的问题: 1.不需要厚书。不过,我听说较薄的可以用作快速参考。

      1. 这完全是主观的,取决于您的目标。 Boost 的网络和多线程库可能是一个好的开始。

      2. 在 std::string、std::stringstream 和 getline(std::istream&, std::string&) 之间应该很好。 C++ 带有大量的内置功能,但并不太臃肿/庞大/难以学习。好好利用它。所有的解析都已经内置了。

      【讨论】:

        【解决方案6】:

        用书学习。 C++ 是一门复杂的语言。我的建议是首先对 C++ 支持的主要编程范式进行相当快速的介绍和总体概述:OOP 和泛型编程:Accelerated C++

        读完这本书,你可以去看看 Bruce Eckel 的两卷 Thinking in C++,非常详细。

        对于 UI 编程,最好的 C++ 工具包是 Qt,它支持多平台。您可以阅读“使用 Qt4 进行 C++ GUI 编程”(第一版可免费下载,只需 google 即可)。如果您想坚持使用 C++/Windows API,请学习 Windows 模板库,尽管由于缺乏官方文档可能会有些困难(尽管网上有很好的教程)。 WTL 是创建非常小、轻量级应用程序的方法(另一方面,Qt DLL,每个需要几 MB)。

        【讨论】:

          【解决方案7】:

          我强烈推荐Stroustrup's Intro C++ book.,它以非常平易近人的方式涵盖了 C++ 和 STL。

          之后,您可能会考虑查看有关 Qt、多平台 GUI 工具包或 Windows 的 WTL 或 MFC 的书籍。您可以使用 .NET + C++,但这需要学习很多东西。根据我使用 Qt 和 MFC 的经验,书籍并没有太大帮助。篡改示例应用程序,构建小应用程序只是为了测试一种功能,以及浏览文档是我能够了解这两个库的唯一方法。我倾向于掩饰太多的书——它们不值钱。

          【讨论】:

            【解决方案8】:

            看在Pete 的份上,请不要直接使用Win32 API。您将在 Microsoft 角落画自己。有很多跨平台库可供您使用:

            • 标准 C++ 库:字符串、文件 i/o、容器、算法
            • Boost 用于标准库中遗漏的日常内容:解析、网络、线程、智能指针、内存池、日期/时间、矩阵等... Boost 库经过同行评审在被接受之前是高质量的。 Boost 是最终成为下一个 C++ 标准一部分的库的温床。
            • GUI 工具包:Qt 和 wxWidgets 非常成熟并被广泛使用。还有更多。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-09-15
              • 2016-10-29
              • 2016-02-13
              • 1970-01-01
              相关资源
              最近更新 更多