2009-06-08 89 views
5

目前我正在使用Java及其面向对象设计方面(我也使用PHP/MySQL很多)。我没有在网络上实现它;我只是用它来设计一般用途的程序。但是,现在我需要立即学习C,并且我对C++有兴趣。我得到了C语言编程语言,有人说这是关于这个主题的最好的书。有人能告诉我什么是最大的挑战,除了字符串处理,我认为编程设计的方式,以及我如何创建程序?我明白我不能上课,但这会如何特别影响我(即,我将不得不重新设计方法,并始终以难以编辑的想法来设计所有内容)?另外,从这些语言跳到C++很难吗?大家都说这是一种非常困难的语言,但是以前的经验会有帮助吗?并且有了这样的经验加速C++难道要开始一本书吗?从Java过渡到C然后C++?

非常感谢。

+0

我写了很多C和ASM“回来的一天”,我不会错过内存分配和指针一点(目前是一个C#人)。 – JohnOpincar 2009-06-08 02:48:21

+2

@John:我的看法是,使用内存分配和指针就像是在开车换挡。当您在美丽的山路上行驶时,它可能会很有趣并且令人兴奋,但是在去购物中心的途中,有99%的时间都被堵在路上。我为我当天做的一些低级别的东西感到自豪,但对于我今天做的99%的东西,这将是一种浪费。 – Uri 2009-06-08 02:50:52

回答

5

不要担心一点。我开始用Java编程,然后转向C++。然后我学习了x86汇编,现在我进入了C语言,然后我回来使用C++的某些功能,如对象。我甚至不久前做过一个Java项目。顺序并不重要,只要你把工作放在学习这些语言上,你就会成功。

现在,你问了关于设计。我认为这是你最喜欢的部分。在OOP中,如果你想创建在数据库的简单包装,您可以创建一个对象,然后你可以建立一个继承系统,多态函数等

在C语言中,你只是做了一个名为sqlite_wrapper文件。 c,包含#sqlite3.h并开始编写代码。您将创建几个函数,决定要发送的参数(结构和值),然后完成。

在C你没有类,但你有文件。拥有不同的文件已经分离了逻辑。在Java中,你有文件+类来分离逻辑,这也很好。

祝你好运,玩得开心。

10

如果您习惯了面向对象,向非面向对象语言过渡的难度最大的部分是使用现有机制调整到“模拟对象”的后勤。在C中,这通常涉及到一个结构,然后有一堆将该结构作为参数的函数。用C++,你可以避免这种情况。但是,过渡到C或C++的最大挑战是要习惯指针和内存分配。毫无疑问,您最初会在引用和取消引用时犯错,并且在您使用它们时会对C++引用感到困惑。你也无疑会导致内存泄漏或错误。而且,由于您正在“在线上”工作,因此崩溃不会很美。我不确定有什么方法可以克服这些痛苦,但是可以练习。

1

像许多人说的。如果你了解其中的差异,这是可能的。在某些情况下,您必须以某种方式使用其他方式,您可以尝试使用该语言进行编程,而不是使用语言编程。用结构和指向结构的指针作为第一个参数“模拟”对象。如果你有经验并且被迫与它一起工作,你将会学到它。

两件事情我想推荐你:

  1. 从语言学习的基础知识后试着去理解指针和内存处理,其中使用*,&的深刻理解。 , - >,有很重要的区别,我经常尝试,直到程序似乎工作。这是一个非常糟糕的主意。

  2. 的你真的可以测试你的程序的良好思维方式使用调试器尽可能多地了解为什么你的程序正在运行或失败,发生了什么。你可以犯错误,永远不会显示出来,但是当它是重要的,你没有他们会吃掉你

2

的时候我从Java中的第2年的Uni -level程序员(有很多去体验其他非C语言)到C++新手约2个小时的朋友辅导。沿着“这是你如何申报一个班级,这里是你好世界,等等”的线路。

从有到C的转换更加痛苦,因为C++有大部分的Java的功能(最大的一人失踪是垃圾收集)。我建议你看看Boost(一个C++库),尤其是智能指针。此外,花在掌握C++标准模板库上的时间花在了时间上!

4

我想说,这将是更容易学习C++基于Java的基础上,比C.

的基础

加速C++不会更难,它是初学者水平的书。那里还有很多其他的好书。在C++中进行思考可能是一个好的开始,但它可能会让你在开始时感到很多熟悉的东西。所以,我会建议通过它,然后抓有效系列。那么Exceptional,现代C++将会很好。

C++并不难,唯一的一点是你需要做的wuite在自己的几件事情。正如Uri在帖子中所说的那样,最棘手的部分可能是内存管理。事实上,它的广阔而难以完全抓住,这可能是其艰难的原因。

This SO thread提供了C++一个很好的和重要的阅读列表。

3

C和C++之间有很大差异。最主要的是在C++中使用面向对象的设计。还有一些细微差异,更多的是“习惯”类型的交易。以下是其中一些仅用于绘制一般图片。

  1. 差异在动态存储器分配。
  2. 没有函数重载用C
  3. 没有函数原型用C
  4. 不同的铸造风格
  5. C中的一个更广泛的库++。

既然你正在从Java转向,面向对象程序设计应该是你的一种习惯,并且转换到C++会更容易。如果你绝对必须从C开始,那没什么大不了的。您仍然能够掌握两种语言使用的相同的一般概念。

1

由于所有的说,C是不是很辛苦,可能是一个很好的补充您的编程库。

C当Java相比,:

  • 有指针,这可以让你低级别访问,并使得有趣的错误。
  • 语言是精益 - 功能少得多。
  • 没有JVM来保护你,用一个很好的解决错误和行号的方法来保护你,有一些OS支持,但是很有限,所以你需要使用工具。
  • 没有垃圾收集,除非你使用one,你必须自己照顾自己的记忆。

总而言之:主要问题将是调试,当涉及到内存和指针的使用时,你会遇到一些新的错误,你将不得不使用工具/思考来解决它,因为没有JVM。