【问题标题】:C++ coming from Java and Objective-CC++ 来自 Java 和 Objective-C
【发布时间】:2011-10-02 09:08:33
【问题描述】:

所以,我对 Java 和 Objective-C 都非常了解,但(也许很奇怪)从未真正学习过 C++。显然,这些语言都是相关的,但存在我不完全理解的语法差异。是否有一个很好的文档来描述 C++ 的基础知识,但仍然假设学习者知道一门编程语言?也许甚至是旨在描述语言之间差异的教程。这就是我要找的。​​p>

另外,是否有关于如何在 Mac 或 iOS 应用程序中使用 C++ 代码的好教程?我觉得有必要学习 C++ 的原因是我正在尝试移植 C++ 程序,而且我听说您可以使用 C++ 代码并将其包装在 Obj-C GUI 中。有人可以向我指出一些有关如何执行此操作的文档/教程吗?

谢谢!

【问题讨论】:

  • 嗯,如果您认为 Java 和 C++ 之间的唯一区别是语法上的差异,那么您将大吃一惊(只需编写一个正确的赋值运算符、移动语义......)。无论如何抱歉,我还没有看到这样的教程 - 可能是因为 C++ 中有许多概念无法映射到 Java..
  • 如果你对 Mac 感兴趣,Objective-C++ 不是基本的 Objective-C 加上了大部分 C++ 吗?重点是允许混合使用 Objective-C 和 C++?
  • @Voo 我不是那个意思。我知道这三种语言之间存在差异,但我有兴趣花时间学习另一种语言。例如,指针是一个大问题,但它们在 Objective-C 中都有介绍。我确信这两种语言都没有,但我理解这一点,我愿意花时间学习新概念。
  • @Jake 那么在这种情况下,我会接受 Kerrek 的建议。这应该很好地教你 C++ 中的概念(没有一些新特性,但无论如何远离诸如移动语义之类的东西可能是一个非常好的主意)。举个例子,好的 C++ 很少需要指针(有例外,尤其是对于低级的东西)——你可以用 C++ 编写 C,但你真的不应该。
  • @Voo:大多数人完全不知道“编程语言的语法”到底是什么。

标签: java c++ objective-c porting


【解决方案1】:

尽管这个家族的语言都是相关的,但这并不意味着你可以随便从一种语言转换到另一种语言并期望编写漂亮的代码。您必须学习该语言的习语和特质,并体验其优势和思维方式。

我建议阅读 Stroustrup 的原著(当然是现代版)。这是最权威的参考资料(没有实际标准),而且写得很清楚。这种方法的好处是,您将学会思考“我将如何在 C++ 中执行此操作”,而不是“我如何音译这段 Java 代码以使其编译”。 (此外,这种方法消除了您可能认为应该“先学习 C” 的任何风险。不要。)

在 MacOSX 上,下载并构建免费的 GCC,或获取 XCode(GCC 附带)。对于iOS我不知道,我怀疑你不能在上面部署原生代码。

【讨论】:

  • 说得好。 Stroustrup 确实扩大了该文本中的 C/C++ 差距。
  • 我明白你在说什么,我同意。我不希望它是一件超级简单的事情。而且我根本不打算学习这个来“音译”Java代码。
  • @Jake:如果您已经熟悉编程,那么您很快就会轻而易举地读完这本书。您可以在第一次阅读时跳过大部分图书馆参考资料。我敢打赌,您只需一个下午和咖啡就可以掌握基本知识。你会感觉好多了,保证!
  • 我认为 Stroustrup 是一本参考书。实际上,将其作为教程阅读似乎是非常艰苦的工作。我不认为我曾经一口气读过超过几页。也就是说,很长一段时间以来,我发现大多数语言教程都很难进行——它们似乎大多是在解释看似显而易见的东西,就好像这是一个超出人类想象的难以理解的概念。视频教程效果更好 - 您可以在视频持续播放时集中 10% 的注意力,然后在出现有趣的事情时集中注意力。
  • @Steve:如果您已经是一名经验丰富的 Java 和 ObjC 程序员,我会认真地试一试这本书——它简洁,但非常清晰,并且包含所有正确的想法。当然还有很多其他的好书,但如果你能从源头中学习,对你来说就更好了,这就是我第一次推荐它的原因。如果它太密集或不透明,我们总是可以重新考虑并查看其他书籍,当然,但这不应该阻止任何人打开 Stroustrup。
【解决方案2】:

我会选择纯 C++ 路线,以材料的质量为指导,而不是寻找 ObjC+Java->C++ 材料。

在我工作的大学里,出于显而易见的原因,我们尝试了两种方法来向具有丰富编程经验(尤其是 Java 经验)的学生教授 C++。

结论是,专业课程在教授 C++ 方面的效果并不比带有一些额外练习材料的通用课程好。重要的是教材的质量。

编辑:您可能会收到很多关于实际差异的好答案,Voo 对您的问题的评论也是相关的。

【讨论】:

    【解决方案3】:

    我知道您的感受 - 已经使用过几种语言并学习过 C++。我也在同一条船上。虽然我想了一会儿,我应该很容易马上学会它,但这并不是那么容易。于是我回到了基础,开始学习 C++。 《C++ Primer》是一本非常好的入门书籍。由于您了解编程的大部分基础知识,因此可以略读前几章中的一些内容。一旦你完成了这个,我会推荐'Effective C++'书和这里维护的C++常见问题解答[http://www.parashift.com/c++-faq-lite/]。

    事实上,您可以先阅读此常见问题解答,看看其中有多少意义,然后将其用作确定在哪里进行深入研究的指南。

    HTH, K

    【讨论】:

    • 永远不要推荐“浏览”任何书籍的章节。尤其是在 C++ 中,最微小的事情都可能导致灾难。仔细阅读每一章很重要,即使是关于操作员的章节,因为他们中的大多数人通常都会有这样的“真的吗?该死的,不知道……”这种信息有时会让你非常头疼。例如,“略读”过这样一章的人可能无法发现 std::cout j) 之类的内容有什么问题?我:j;这将始终打印 0 或 1,这与通常的预期相反。
    • @MisterSir - 嗯 - 我认为任何程序员都应该知道某些运算符的优先级是不明显的,“它应该是什么”因人而异,这就是为什么 (如果没有别的,为了可读性)你不应该太吝啬你的括号。我在一定程度上同意您的评论,但是在无聊僵硬的情况下从头到尾阅读内容不会让您记忆犹新。睡着了,或者像僵尸一样盯着页面看,与学习不同。
    • @MisterSir - 我想说你的评论强烈建议学习者应该对他们编写的每个示例程序进行彻底的测试。当您发现意想不到的事情时,那么您可以进行研究,“为什么”会更好地记住。
    • @Steve314 - 当我说要仔细阅读时,我并没有这么严重的意思。仔细阅读意味着确保你没有跳过重要的事情。适当的阅读技巧可以帮助您确定哪些行包含重要信息,哪些行没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    相关资源
    最近更新 更多