我对C或C++ 都不了解,是不是应该先学习C?不,首先学习C++。C++ 的C子集对于C/C++ 的新手是比较容易学的,又比C本身容易使用。原因是C++(通过强类型检查)提供了比C更好的保证。进一步说,C++ 还提供许多小特征,例如运算符new
,与C语言对应的东西相比,它们的写法更方便,也更不容易出错。这样,如果你计划学习C和C++(而不只是C++),你不应该经由C那条迂回的路径。为能很好地使用C,你需要知道许多窍门和技术,这些东西在C++ 里的任何地方都不像它们在C里那么重要、那么常用。好的C教科书倾向于(也很合理)强调那些你将来在用C做完整的大项目时所需要的各种技术。好的C++ 教科书则不太一样,强调能引导你去做数据抽象、面向对象的程序设计的技术和特征。理解了C++ 的各种结构,而后学习它们在(更低级的)C里替代物将会很简单(如果需要的话)。
要说我的喜好:要学习C,就用 [Kernighan,1988];要学习C++,就用[2nd]。两本书的优点是都组合了两方面内容:一方面是关于语言特征和技术的指导性的描述,另一方面是一部完整的参考手册。两者描述的都是各自的语言而不是特定的实现,也不企图去描述与特定实现一起发布的特殊程序库。
现在有许多很好的教科书和许多各种各样风格的材料,上面只是我对理解有关概念和风格的喜好。请仔细选择至少两个信息来源,以弥补可能的片面性甚至缺陷,这样做永远是一种明智之举。
我在一开始应该把C++ 作为一种OOPL,还是作为一个更好的C语言?看情况。为什么你想开始用C++?对这个问题的回答应该能确定你走近C++ 的方式,在这里,没有某种放之四海而皆准的道理。按照我的经验,最安全的方式是自下而上地学习C++,也就是说,首先学习C++ 所提供的传统的过程性程序设计特征,也就是那个更好的C子集;而后学着去使用和遵循那些数据抽象特征;再往后学习使用类分层去组织相互有关的类的集合。
按照我的观点,过快地通过早期阶段是很危险的,这样会使忽视某些重要概念的可能性变得非常之大。
例如,一个有经验的C程序员可能会认为C[3]的更好的C子集是‘很熟悉的’,因此跳过了教科书中描述这方面的前100页或多少页。但在这样做时,这个C程序员可能就没看到有关函数的重载能力,有关初始化和赋值之间差异的解释,用运算符new
做存储分配,关于引用的解释,或许还有其他一些小特征。在后面阶段它们会不断地跳出来缠住你,而在这时,一些真正的新概念正在复杂的问题中发挥着作用。如果在更好的C中所用的概念都是已知的,读过这100页可能也就只要几个小时的时间,其中的一些细节又是有趣的,很有用的。如果没有读,后面花的时间可能更多。
有些人表达了一种担心,害怕这种‘逐步方式’会引导人们永远去写C语言风格的东西。这当然是一种可能的后果,但是从百分比看