从Java转换到C然后转换到C ++?

时间:2009-06-08 02:31:03

标签: java c++ c transition

目前我正在使用Java及其面向对象的设计方面(我也经常使用PHP / MySQL)。我没有在网上实现它;我只是用它来设计一般用途的程序。但是,现在我需要学习C,我对C ++很感兴趣。我得到了 C编程语言,有人说这是关于这个主题的最好的书。有人可以告诉我,除了字符串处理,我对编程设计的思考方式,以及我如何创建程序,最大的挑战是什么?我知道我不能上课,但这对我有什么影响(即我是否需要重新设计方法并始终以更难编辑的方式设计所有内容)?是否难以从这些语言中跳转到C ++?每个人都说这是一种非常难的语言,但以前的经验会有所帮助吗?有了这样的经验, Accelerated C ++ 会难以开始一本书吗?

万分感谢。

7 个答案:

答案 0 :(得分:10)

如果您习惯于OOP,那么转换到非OO语言的最难的部分就是使用现有机制调整“模拟对象”的后勤工作。在C中,这通常涉及具有结构,然后具有一系列将该结构作为参数的函数。使用C ++,您可以避免这种情况。

但是,转换到C或C ++的最大挑战是如何习惯于指针和内存分配。毫无疑问,您最初会在引用和解除引用时出错,并在使用它们时对C ++引用感到困惑。毫无疑问,您也会导致内存泄漏或错误。而且由于你正在“在电线上”工作,崩溃将不会很好。我不确定是否有办法克服这些痛苦而是练习。

答案 1 :(得分:5)

别担心。我开始用Java编程,然后转到C ++。然后我学习了x86程序集,现在我进入了C,然后我又回来使用C ++的一些功能,比如对象。我不久前甚至做过一个Java项目。订单并不重要,只要你开始学习这些语言,你就会获得成功。

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

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

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

祝你好运,玩得开心。

答案 2 :(得分:4)

我想说在Java的基础上学习C ++比在C语言基础上学习更容易。

加速C ++并不难,它是一本初学者级别的书。还有很多其他好书。用C ++思考可以是一个好的开始,但它可能会让你在很多熟悉的东西中陷入困境。所以,我建议你去完成它,然后抓住Effective Series。那么Exceptional,Modern C ++将会很不错。

C ++并不是那么困难,唯一的事情就是你需要自己做几件事。 Uri在他的帖子中说,最棘手的部分可能是内存管理。事实上它的巨大而且难以完全抓住,这可能是它的艰难之处。

This SO thread为C ++提供了一个很好且重要的读数列表。

答案 3 :(得分:3)

C和C ++之间存在很大差异。主要的是在C ++中使用面向对象的设计。还有一些细微的差别,更多的是“习惯于”交易类型而不是任何东西。以下是其中一些只是为了描绘一般情况。

  1. 动态内存分配的差异。
  2. C
  3. 中没有函数重载
  4. C
  5. 中没有函数原型
  6. 不同的铸造风格
  7. C ++中更广泛的库。
  8. 由于您正在从Java迁移,因此OO编程对您来说应该是一种习惯,并且转换到C ++会更容易。如果你绝对必须从C开始,这没什么大不了的。您仍然可以掌握两种语言中使用的相同概念。

答案 4 :(得分:2)

我从小学二年级的Uni-level程序员(在其他非c语言方面有很多经验)变成了一个C ++新手,从朋友那里得到了大约2个小时的辅导。按照“这就是你如何宣布一个班级,这里是你好世界等”。

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

答案 5 :(得分:1)

像许多人说的那样。如果你了解差异就有可能。在某些方面,你必须在某些方面使用其他方式,你可以尝试编程到语言而不是语言,例如使用结构“模拟”对象和作为第一个参数的结构指针。如果您有经验并被迫使用它,您将学习它。

我想推荐你两件事:

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

  2. 考虑一种可以真正测试程序的好方法,尽可能使用调试器来理解程序运行或失败的原因以及发生的情况。您可以制作从未出现的错误,但是当它很重要并且您没有时间吃掉它时

答案 6 :(得分:1)

正如所有人所说,C不是很难,并且可以成为你的编程工具的一个很好的补充。

C与Java相比:

  • 有指针,这允许你进行较低级别的访问,并产生有趣的错误。
  • 语言很精简 - 功能要少得多。
  • 没有JVM可以通过一个很好的抛出来解释错误和行号来保护你,有一些操作系统支持,但是很有限,所以你需要使用工具。
  • 没有垃圾收集,除非你使用one,否则你必须自己照顾好自己的记忆。

总结一下:主要问题是调试,当涉及到内存和指针的使用时,你会遇到一些新的错误,你将不得不使用工具/更加努力地解决它,因为它有没有JVM。