我今天在开放日参观了大学CS系,在实验室参观中我们坐下来参加了一些本科生的期末项目。一个特别好-一种FPS小行星游戏。我决定看一下src
目录,以发现它是用C ++完成的(其他大多数项目都是Java 3D应用程序)。
我以前没有做过C,但是之前已经看过一些C代码。从我在该游戏的.cpp代码中看到的看,它看起来并没有太大不同。
我对学习C或C ++感兴趣,但稍后可能会学习其他。是否有任何优势,我一个学习之前,其他和如果是的话,哪一个?
我今天在开放日参观了大学CS系,在实验室参观中我们坐下来参加了一些本科生的期末项目。一个特别好-一种FPS小行星游戏。我决定看一下src
目录,以发现它是用C ++完成的(其他大多数项目都是Java 3D应用程序)。
我以前没有做过C,但是之前已经看过一些C代码。从我在该游戏的.cpp代码中看到的看,它看起来并没有太大不同。
我对学习C或C ++感兴趣,但稍后可能会学习其他。是否有任何优势,我一个学习之前,其他和如果是的话,哪一个?
Answers:
在学习C ++之前不需要学习C。
他们是不同的语言。一个普遍的误解是,C ++在某种程度上依赖于C,而不是完全依赖于完全指定的语言。
仅仅因为C ++共享许多相同的语法和语义,并不意味着您需要首先学习C。
如果您学习C ++,最终您将学习大部分C语言,并且随着时间的流逝,它们之间的语言会有一些差异。实际上,编写适当的C ++很难,因为中级C ++程序员倾向于编写C / C ++。
如果您首先了解C,那么对学习C ++来说是个不错的选择。您将从了解一部分语言开始。如果您首先不了解C,那么没有必要关注另一种语言。有很多不错的书籍和教程,使您从一无所知开始,涵盖了您从C中学到的所有知识,这些知识也适用于C ++。
我首先学习了C,在学习C ++之前,我上了一门使用C的数据结构的课程。这对我来说很好。用C编写的数据结构课程使我对指针和内存管理有了深入的了解。一旦我了解了面向对象范式的好处,它也就显而易见了。
另一方面,通过首先学习C,我养成了一些习惯,这些习惯最初使我编写了不好的C ++代码,例如过度使用了指针(当C ++引用可以使用时)和预处理器。
C ++实际上是一种非常复杂的语言,具有许多功能。但是,它实际上不是C的超集。而是有一个C ++的子集,它由基本的过程编程构造(循环,if和函数)组成,与C非常相似。在您的情况下,我将从此开始,然后逐步研究更高级的概念如类和模板。
恕我直言,最重要的事情是,在您的大脑陷入一种审视世界的方式之前,就要尽早接触不同的编程范例,例如过程,面向对象,功能和逻辑。顺便说一句,我也强烈建议您学习一种函数式编程语言,例如Scheme。它将真正扩大您的视野。
我认为您应该首先学习C,因为我首先学习了C。C让我很好地掌握了语法和诸如指针之类的陷阱,所有这些都流入了C ++。
我认为C ++可以很容易地包装所有这些陷阱(需要一个在使用[]运算符和狡猾的索引时不会溢出的数组?当然,要创建一个进行边界检查的数组类),但是您需要知道什么在您理解为什么以某些方式完成工作之前,他们会被他们咬伤。
说完所有的话,通常讲授C ++的方式是“ C ++是带有对象的C,这是C的东西,这是所有这些OO东西的工作方式”,因此,如果您愿意的话,您可能会在学习任何真正的C ++之前先学习基本的C。无论如何都遵循大多数文本。
我不同意这里的多数意见。我认为您应该在学习C ++之前学习C。绝对没有必要,但是我认为这使学习C ++变得容易得多。C是C ++的核心。您所学到的关于C的任何知识都适用于C ++,但是C的体积小得多,而且容易学习。
拿起K&R并仔细阅读。它简短,可以使您对语言有足够的了解。一旦有了指针和函数调用的基础知识,就可以更轻松地升级到C ++。
static
,模板(和可笑的恐吓模板的错误,编译器发出)等
没有。
通常,学习C ++更有用,因为它更接近于最现代的基于OO的语言,例如Eiffel或C#。
如果您的目标是学习C ++,请首先学习现代的标准C ++。将malloc放在一边。
但是史蒂夫·罗(Steve Rowe) 有一点 ...
就像生活中许多其他问题的答案一样,这取决于。这取决于您的编程兴趣和目标。如果您想使用GUI对桌面应用程序进行编程,那么C ++(和OOP)可能是更好的选择。如果您对非x86芯片组上的硬件编程感兴趣,那么C通常是一个更好的选择,通常是因为它的速度。如果您想创建一个新的媒体播放器或编写一个业务应用程序,我会选择C ++。如果要对星系碰撞或流体动力学进行科学模拟,请注意C的作用。
restrict
符C 之外,C没有其他与性能相关的语法/语义结构,那么您为什么还认为C ++代码具有更丰富的语法和元编程(如元编程)应该产生较慢的代码呢?您甚至知道表达模板吗?
restrict
,所有主要的C ++编译器都将其作为扩展提供)。您是否真的认为,如果使用相同的代码,使用相同的编译器,C ++和C在性能上会有任何区别吗?[...]
我认为先学习C是个好主意。
comp sci课程仍然使用C是有原因的。
在我看来,它避免了要求OOP承担的所有“拥挤”主题。
我认为过程编程是最先学习编程的最自然的方法。我认为这是正确的,因为到最后,您所拥有的是:一行又一行地执行的代码行。
如今,许多文本都在倡导“以对象为先”的方法,并在介绍数组之前开始谈论汽车和变速箱。