Java开发者学习C++的最佳途径是什么?

44

我认为自己是一名经验丰富的Java开发者,计划开始学习C++。

如果你有相同的经历,即在学习Java之后学习C ++,我想听听你对如何做到这一点的想法。

[更新] “最佳方法”没有很好地量化。我要的是利用我现有的java知识和编程经验,以便我可以快速掌握C ++。


我对加入我们C++团队的Java程序员最大的不满是:停止使用new创建所有东西! - ErsatzStoat
10个回答

20

我曾经教过Java程序员学习C++,尽管我是从另一个方向学习的。

你是否熟悉C语言?如果不熟悉,请阅读Kernighan和Ritchie。C++的许多特殊之处都可以通过希望C++成为具有C基本表达式语法的"更好的C"来解释。

你应该看看Stroustrup的书。

我很欣赏Bruce Eckels的Thinking in C ++

我经常参考Cline,Lomow和Girou的The C ++ FAQ Book。Marshall Cline在他的网站上也有C ++ FAQ内容

更新

你还可以看看C ++ for Java Programmers。我不知道这本书,但它看起来还不错。


同时尝试使用Stroustrup的Effective C++系列。 - yesraaj
Stroustrup的新版本书籍:出版商亚马逊 - Frank Henard

12

我的建议是编写高度基于指针的东西,比如链表库、BST库等。代码应该是无STL的,类似于纯C。您应该使用这样的库构建应用程序(例如排序算法?),并学习如何处理所有肯定会出现的陷阱,如果这是您的第一个C/C++代码。

在我看来,了解C++最重要的基础是理解指针和类和结构的低级内存表示。这就像一种启示,之后一切都变得简单明了;)


1
是的,从零开始实现数据结构是学习指针、显式内存(de)分配等内容的好方法。 - javashlook
STL现在是C++的一个重要组成部分,有经验的C++工程师会期望c++代码使用标准范例。 - gerardw

5

2
其他人已经指定了所需的书籍。我想补充几点需要注意的地方:(背景是Java)
  • C++不像Java一样提供垃圾回收机制,因此必须非常注意内存泄漏。始终使用delete删除使用new在堆上分配的内存。在编写C++应用程序时,请记住FAQ中的自由存储管理
  • 在C++中,你可能经常需要使用指针(Java中没有)。有效地学习和使用指针(@Charlie Martin建议的书籍)。
  • 一旦熟悉了C++,学习STL的基础知识并有效地使用。(JosuttisScott Meyers的书)
祝你好运。

2

我强烈反对先学习C语言,也不建议从Effective系列书籍中尝试学习C++,尽管这些书籍非常出色。相反,获取一份由Andrew Koenig和Barbara Moo撰写的Accelerated C++,这是由最初的C++开发组成员编写的,将教你如何使用现代C++特性。


有异议的观点请参见 http://www.idinews.com/KoenigRvw.html - Norman Ramsey
哼,我不明白说一本书很棒并且强烈推荐与我的推荐有何不同。 - anon

2
"C++ for Java Programmers" by Mark Allen Weiss是一本适合有经验的Java程序员入门的好书。

1

学习Qt。相信我,我既是Java开发人员,也是C++开发人员;我可以告诉你,Qt使得C++语言更接近于Java。不要只学习裸的C++。

C++与Qt让你的生产力无限提高。我曾经结合了很多不同的库(Boost、Intel的、数据库连接器等)才能实现我们所做的东西(高性能/实时计算)。最后,我发现我需要的80%以上已经包含在Qt中。

更不用说,在我所使用过的任何框架/库中,Qt都有着最好的文档,这使得自学变得非常容易。

试试吧,亲身体验一下。

免责声明:我只是一个开发人员——我不为诺基亚工作。=p


1

Andy和Charlie已经给你们书了,因此我将指出boost库和Qt框架。

Boost提供了一些基本函数供您使用,因此您不需要从头开始创建所有内容。

Qt是一个GUI框架,我觉得非常好用。有一本名为“使用Qt 4进行C++ GUI编程”的书,涵盖了学习Qt的所有重要主题。


1
这可能听起来有点滑稽,但你要求的是最好的方式,而不是最快的方式。我建议你先学习C语言,再学习C++。Kernighan and Ritchie 是有史以来最好的语言书之一。当你掌握了C和Java,你就能够在几乎没有额外努力的情况下,在C++的合理子集中编写良好、清晰的程序。

那么最“快速”的方法是什么? - Journeyman Programmer
2
首先学习C并不是一个好主意,因为开发者在学习C++时需要重新学习某些东西(例如I/O)。 - gerardw

1

K&RStroustrup是经典之作,最终你应该阅读它们,但我不认为它们适合C++初学者。在现代C++中思考意味着思考类、模板、异常和流,这些都不在C语言中。

我建议初学C++的人阅读一本大学级别的教材,比如Deitel and Deitelalt text

在玩耍一番之后,你应该专注于学习编写一个行为类似于内置类的类。这意味着提供复制构造函数、operator=operator==operator<<等等。在此过程中,你将遇到嵌入在C++语言中的各种概念。一旦你掌握了基础知识,我会同意其他人的看法,Effective C++是必读的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接