目前我正在使用Java及其面向对象的设计方面(我也经常使用PHP / MySQL)。我没有在网上实现它;我只是用它来设计一般用途的程序。但是,现在我需要学习C,我对C ++很感兴趣。我得到了 C编程语言,有人说这是关于这个主题的最好的书。有人可以告诉我,除了字符串处理,我对编程设计的思考方式,以及我如何创建程序,最大的挑战是什么?我知道我不能上课,但这对我有什么影响(即我是否需要重新设计方法并始终以更难编辑的方式设计所有内容)?是否难以从这些语言中跳转到C ++?每个人都说这是一种非常难的语言,但以前的经验会有所帮助吗?有了这样的经验, Accelerated C ++ 会难以开始一本书吗?
万分感谢。
答案 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 ++中使用面向对象的设计。还有一些细微的差别,更多的是“习惯于”交易类型而不是任何东西。以下是其中一些只是为了描绘一般情况。
由于您正在从Java迁移,因此OO编程对您来说应该是一种习惯,并且转换到C ++会更容易。如果你绝对必须从C开始,这没什么大不了的。您仍然可以掌握两种语言中使用的相同概念。
答案 4 :(得分:2)
我从小学二年级的Uni-level程序员(在其他非c语言方面有很多经验)变成了一个C ++新手,从朋友那里得到了大约2个小时的辅导。按照“这就是你如何宣布一个班级,这里是你好世界等”。
从那里到C的转换更加痛苦,因为C ++具有Java的大部分功能(最大的缺失是垃圾收集)。我建议您研究Boost(一个C ++库),尤其是智能指针。此外,花在掌握C ++标准模板库上的时间花费了很多时间!
答案 5 :(得分:1)
我想推荐你两件事:
从语言中学习基础知识后,尝试深入理解指针和内存处理,在哪里使用*,& ,. , - >,有重要的区别,我曾经尝试过,直到该程序似乎工作。这是一个非常糟糕的主意。
考虑一种可以真正测试程序的好方法,尽可能使用调试器来理解程序运行或失败的原因以及发生的情况。您可以制作从未出现的错误,但是当它很重要并且您没有时间吃掉它时
答案 6 :(得分:1)
正如所有人所说,C不是很难,并且可以成为你的编程工具的一个很好的补充。
C与Java相比:
总结一下:主要问题是调试,当涉及到内存和指针的使用时,你会遇到一些新的错误,你将不得不使用工具/更加努力地解决它,因为它有没有JVM。