从Java/C#到C++的最佳途径是什么?


10

在我的大学里,我的大部分课程都是用Java编写的。我最近还在暑期实习中学习了C#(和Visual Studio环境)。现在,我正在学习计算机图形学的入门课程,并且教授课程的研究生喜欢使用C++通过GLUT访问OpenGL绑定。

有没有人有任何好的资源,如何从Java/C#到C++的良好过渡?很明显,指针会成为一个大问题,但我应该寻找的其他任何东西?任何教程,指南等将非常有帮助!

谢谢!

8

是的,我受到了同样的错误。大学倾向于依靠Java,然后允许您在项目中选择想要使用的语言。

最好的方法就是跳进去。从小处开始,采取宝宝的步骤,只有当你到达那里时Google会让你感到困惑。还可以找到已经发布他们的源代码的项目。看看他们如何构建他们的程序。基本上,只是修补概念。网络上有大量的信息。

让它很有趣,抓住C++ game development book,所以它不会太快变得麻木。

这里的一些地方,我在学习

http://www.cprogramming.com/

http://www.wikipedia.com

http://www.cplusplus.com/


4

如果你已经知道Java/C#我建议直接使用C而不是C++。根据该网站,GLUT与C++具有相同的C绑定,因此您应该全部设置。无论如何,学习C语言的最好方法是购买并阅读“C语言编程”的副本,并使用C编译器坐下来运行。


2

Scott Meyers的Effective C++是一本很棒的书,可以帮助您学习C++。为您提供该语言的概述,并介绍了许多您将在整个基本上任何C++程序的开发过程中使用的关键概念。


2

有效的C++斯科特迈尔斯是一个伟大的书,以帮助你学习C++中发现有用的。为您提供该语言的概述,并介绍了许多您将在整个基本上任何C++程序的开发过程中使用的关键概念。

我喜欢这本书的所有3个版本,它是我作为UT高级班的一本书,但它不是一本起始书。你可以在C++中使用更少的东西,尽管在阅读Meyer的工作之前你肯定不会使用编译器。

我不知道它是否仍在打印,但我发现导航C++有用,但我也很喜欢Pascal的指针。当然,我忘记了15年前你必须了解OOP是什么,现在更多地假设它。所以也许迈尔不是不合格的。思考?


2

维基百科上有关于comparisons between Java and C++的文章。

您不必担心C++中检查的异常,但您确实需要了解const correctness


2

有两个主要区别:语法和内存管理。

在C++中,您已经拥有了指针,它们更强大(或者功能更弱,取决于您对权力的解释)对象引用,您从Java中已经知道这些指针。

在Java中,你可以这样做:

Thing mything = new Thing(); // mything is an object reference 
mything.method(); 

在C++中你可以这样做:

Thing * mything = new Thing(); // mything is an object pointer 
mything->method(); 
delete mything; 

的语法差别是显而易见的: - '' '>',而不是当从指针调用对象方法到对象时。在C++中,当你完成一个对象时,你必须明确地释放内存。在一天结束的时候,你在C++和Java中做同样的事情,实例化对象和调用方法,在每行的末尾添加无用的分号等。难道Python会变得如此流行吗?:

mything = Thing() # mything is whatever I want it to be 
mything.method() 

浏览任何一半体面的C++文本将帮助您填写其余细节。


2

我也彻底推荐布鲁斯埃克尔的Thinking in C++。对于那些想要进入C++思维模式的经验丰富的程序员来说,这本书是一本很棒的书。

他很善于制作他的书的电子版available for free


2

我强烈建议任何学习C++的人阅读Stroustrups“The C++ Programming Language”。迈耶斯和埃克尔有很棒的东西,但是没有什么能够吸引那些决定语言应该是什么样的人以及他打算如何使用它的人。


2

我有完全相同的问题。我唯一能找到的书是"Pro Visual C++ 2005 for C# Developers" by Dean C. Wills。这是一个很好的例子,我认为这本书来的角度可能是你要找的。


1

您将需要完全不同的内存处理感觉。同时考虑释放你不需要的一切。在Java和C#中,你只是放开你的对象,内存会为你整理 - 你无法在CPP中做到这一点