6

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

太感谢了。

4

7 回答 7

10

如果您习惯了 OOP,那么过渡到非 OO 语言的最困难的部分将是使用现有机制适应“模拟对象”的逻辑。在 C 中,这通常涉及拥有一个结构,然后拥有一堆将该结构作为参数的函数。使用 C++,您可以避免这种情况。

然而,过渡到 C 或 C++ 的最大挑战将是习惯指针和内存分配。毫无疑问,您最初在引用和取消引用时会犯错误,并且在使用 C++ 引用时会感到困惑。毫无疑问,您还会导致内存泄漏或错误。而且由于您正在“在线”工作,因此崩溃不会很漂亮。我不确定有没有办法克服这些痛苦,但要练习。

于 2009-06-08T02:37:30.000 回答
5

一点也不担心。我开始使用 Java 进行编程,然后转向 C++。然后我学习了 x86 汇编,现在我进入了 C,然后我回来使用 C++ 的一些特性,比如对象。不久前我什至做了一个Java项目。顺序并不重要,只要你努力学习这些语言,你就会成功。

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

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

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

祝你好运,玩得开心。

于 2009-06-08T03:56:54.503 回答
4

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

加速 C++ 不会更难,它是一本初学者级别的书。还有很多其他的好书。用 C++ 思考可能是一个好的开始,但一开始可能会因为很多熟悉的东西让你感到厌烦。所以,我建议只是通过它,然后抓住有效系列。那么 Exceptional,Modern C++ 将是很好的选择。

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

这个 SO 线程为 C++ 提供了一个很好且重要的阅读列表。

于 2009-06-08T04:52:33.570 回答
3

C 和 C++ 之间存在很大差异。主要的一个是在 C++ 中使用面向对象的设计。还有一些细微的差异,这更多的是“习惯”交易类型。这里有一些只是为了描绘一个一般的画面。

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

由于您是从 Java 迁移过来的,OO 编程应该是您的一种习惯,并且更容易过渡到 C++。如果您绝对必须从 C 开始,那没什么大不了的。您仍然能够掌握两种语言中使用的相同通用概念。

于 2009-06-08T06:39:35.277 回答
2

我从一名二年级的 Java 单级程序员(在其他非 c 类语言方面拥有丰富的经验)变成了一名 C++ 新手,并接受了大约 2 个小时的朋友辅导。沿着“这就是你声明一个类的方式,这里是你好世界,等等”。

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

于 2009-06-08T04:37:31.470 回答
1

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

我想向你推荐两件事:

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

  2. 想一个可以真正测试程序的好方法,尽可能多地使用调试器来了解程序运行或失败的原因以及正在发生的事情。你可以犯一些永远不会出现的错误,但是当它很重要而你没有时间时,它们会吞噬你

于 2009-06-08T04:33:22.563 回答
1

正如大家所说,C 语言并不难,可以很好地添加到您的编程库中。

C 与 Java 相比:

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

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

于 2009-06-08T07:30:24.050 回答