【问题标题】:Learning C++ as a Perl programmer [closed]作为 Perl 程序员学习 C++ [关闭]
【发布时间】:2010-03-31 16:04:12
【问题描述】:

我是一名 7 年的 Perl5 程序员,现在我正在努力学习 C++。 一些 C++ 语法对我来说很难理解和用 C++ 的方式思考。

例如: 在 Perl 中,您可以混合数组中的数据

@array = (1,"string",5.355);

您可以将任何值分配给标量变量:

$var = 1;
$var = "string";
$var = \$reference_to_scalar;

例子很多。

我的一个朋友向我推荐了 Bruce Eckel 的《Thinking of C++》一书,但我没有任何 C 背景,有些东西我很难理解。

所以我的问题是 - 对于这种情况,你能推荐我一本书吗?我不想学习 C。我了解 OOP(我也越来越熟悉 C++ oop),我了解指针(以及一些算术)和引用(在 Perl 中广泛使用)的意义。

我不需要傻瓜手册(什么是intbooldoubleifwhile),我只需要从 Perl 的角度学习 C++ 的方向程序员,因为我相信像我这样的人很多。

提前谢谢你。

编辑:感谢您推荐的所有书籍和答案,我将尝试使用“Accelerated C++”。我将从头开始,尝试将我的思维流转为 C++。我添加了“初学者”标签。

【问题讨论】:

标签: c++ perl


【解决方案1】:

“C++ For Perl Programmers”是一个非常具体的要求。鉴于 Perl 比 C++ 抽象出更多的机器,我认为一个好的开始方法是忘记你对 Perl 的了解并获得一本普通的 C++ 书籍。

例如,您认为应该允许在一个数组中包含多种数据类型似乎是合理的,因为 Perl 数组是一种更高级别的构造,而不仅仅是内存中的一系列连续单词。如果我要从 C++ 中的一个数组转到 Perl 中的一个,我会说 Perl 数组就像一个 C++ 数组,它保存指向数据而不是数据的指针(如果这是真的 - 我不是 Perl 程序员所以可能不是。也许 Perl 数组更像是一个链表数据结构。无论如何,你明白了。)向后看,IMO,并不完全相同。

就我推荐的书而言 - 有很多好书,所以这取决于您正在寻找的风格和深度。我认为Accelerated C++ 非常适合提升 - 它彻底并且涵盖了很多领域,而不会让您被繁琐的细节淹没。

【讨论】:

  • Perl 数组是 Perl 标量的列表。标量在内部是一组结构(基本上是结构的联合)。从 Perl 程序员的角度来看,标量可以包含 int、float、string 或引用。 Perl 引用可以保存指向任何 Perl 数据类型的指针。
【解决方案2】:

除非您想了解 C,否则不要费心学习 C。用 C++ 编程与用 C 编程完全不同。我知道大多数书籍和老师都声称不是这样,但他们错了。您应该寻找例外情况,例如前面提到的“加速 C++”。

您不会找到任何可以帮助您编写代码的书籍,就像您刚刚展示的代码一样。 Perl 是一种非常弱类型的语言,而 C++ 恰恰相反:一种强类型语言。但是,有一些方法可以通过各种提升结构(例如变体和元组)来获得您在帖子中显示的内容。

我建议在进入这类事情之前先将 C++ 作为一门完全独立的语言来学习。不要作为 Perl 程序员来学习 C++,而是作为一个完整的新手来学习它。您可能对前几章感到厌烦,但最终您将更好地掌握 C++ 独有的风格和功能与 Perl 独有的风格和功能。我还没有看到任何“Xlanguage for Ylanguage”一书可以帮助您实现目标。

【讨论】:

    【解决方案3】:

    我经历了相反的过程。我学到的第一件事是,虽然你可以编写看起来像 C 或 C++ 的 Perl 代码,但你不应该这样做。你也一样。您可能可以找到一种编写 Perl 风格的 C++ 代码的方法,但不必费心。语言差异太大。作为 C++ 程序员,您需要学习如何编写 C++ 代码。已经推荐了几本商品书。我认为你应该通过找一位导师来加强这一点。如果您以正确或错误的方式做事,您将立即获得反馈。您还可以查看C++ FAQ Lite,尤其是第 28 章和第 29 章关于新 C++ 程序员的问题。

    最大的不同是C++是强类型的。每个变量都有一个类型,它不会改变。您的示例 Perl 代码在 C++ 中在技术上是可行的,但它需要一个额外的库,我不确定您是否已经准备好。相反,C++ 方法是将混合但相关的项目的集合视为它们自己的新类型 - structclass

    另一个不错的选择是在 SO 上发布特定的 C++ 问题。我们鼓励提出初学者级别的问题,只要它们的措辞清晰并显示出一些事先的努力。

    【讨论】:

    • 感谢您的建议。我会尽量不要以 perl 的方式思考(有不止一种方法可以做到)。我发现在 C++ 中你认为的方式比 perl 更严格。我希望这个社区能帮助我解决任何进一步的问题。
    【解决方案4】:

    我尝试从“Thinking in C++”一书中学习 C++。我发现它非常非常难以学习。

    Andrew Koenig 和 Barbara E. Moo 所著的“Accelerated C++: Practical Programming by Example”是一本更适合 C++ 初学者的书

    【讨论】:

    • 这绝对是一本非常好的指导书,深入探讨了将 C++ 用作 C++ 而不是“C 的超集”。
    【解决方案5】:

    我第二次用 C++ 思考。了解perl后读了一遍,觉得很不错。第二版不假定 C 知识;这是前言中的先决条件下所说的:

    在本书的第一版中,我 决定假设别人 教过你 C 并且你在 至少舒适的阅读水平 它。我的主要关注点是 简化我发现的困难: C++ 语言。在这个版本中我 添加了一个快速的章节 C 的介绍,以及 在 CD 上的 C 研讨会中思考,但我是 仍然假设你已经拥有 某种编程经验。 此外,正如你学到很多 直观地看到新词 在小说的上下文中,这是可能的 从 使用它的上下文 本书的其余部分。

    正如 danben 所说,您几乎只需要“忘记您对 perl 的了解”。了解 perl 是很有用的,因为它是另一种编程语言(甚至类似于 C),但它远没有“学习差异”的程度。

    另外:电子版的 Thinking In C++ 是免费的。

    【讨论】:

      【解决方案6】:

      我使用 Perl 专门用于我的日常工作,并在晚上和周末编写 C++ 程序以获得乐趣。他们需要完全不同的思维方式。你最好以新手程序员的身份接近 C++,然后从“Hello World”开始学习。当然,您可以快速了解诸如数据类型之类的一般概念,但仍然要足够注意从 long 中了解您的 short 以及从指针中了解您的引用。

      除非您真的需要了解 C,否则我会避免先学习 C。C 中的字符处理很痛苦,不适合我怀疑您想做的事情。 C++ 中的 String 类是你的朋友:学习它,爱它就活下去!

      【讨论】:

        【解决方案7】:

        实际上,既然您已经了解一门命令式语言,学习 C 语言根本不会花费您太多时间。基础都是相同的——if 语句、while 循环、for 循环等。甚至命名空间的组织方式也相似(尽管内容当然不同。)您可能希望忽略一些指针处理,如C++ 的引用略有不同,但至少阅读一次K&R (the official C reference) 的副本不会对您造成任何伤害。 (无论如何,每个体面的程序员都应该在书架上放一份副本作为参考。)

        之后,拿起最新版本的Stroustrup 并开始使用,确保您完成练习。对于面向 Perl 的人来说,有些概念可能有点陌生,但不会陌生。如果您遇到一个您觉得棘手的特定概念,请在 SO 上再次发布,会有很多人乐意与您一起完成它!


        (来源:wikimedia.org


        (来源:att.com

        【讨论】:

        • 我不明白为什么这被否决了。这是 C 和 C++ 的两本必备书籍——即使您从其他方面学习(例如,Accelerated C++ 非常好,正如另一个答案中所推荐的那样),这两本书也是您可以以印刷形式获得的语言的最佳参考。
        • 可能是因为您建议先学习 C。经验丰富的 C++ 程序员不鼓励这种做法。出于同样的原因,我正在考虑自己对你投反对票,但我认为你的答案不应该低于 -1。
        【解决方案8】:

        我的大学向我们推荐了这本书:http://www.lrde.epita.fr/~akim/ccmp/assignments.html#C_002b_002b-Primer

        无论如何,Thinking in C++ 可以在网络上免费获得。你可以在我给你的上一个链接上找到链接。

        祝你好运:)

        【讨论】:

          【解决方案9】:

          Here你可以找到各种各样的免费下载/在线书籍。

          【讨论】:

            【解决方案10】:

            Stroustrup 的书在学习语言的时候有点难,最好尝试另一本书,并参考 Stroustrup 的书。

            【讨论】:

            • 在一年的圣诞假期里,我从 Stroustrup 那里学习了 C++;有些章节走的有点慢,但如果一个人已经知道一两种语言,这条路就可以了。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-19
            • 1970-01-01
            相关资源
            最近更新 更多