一、什么是 C++?
很多人不知道这个问题的正确答案。如果有人认为"C++ 是 C 的超集",那这个先生就大大落伍了,这是二十年前的答案了。如果你说"C++ 是一种面向对象的程序设计语言",哈哈,沾边,但也不对,在98年 C++ 国际标准公布以后尤其不对!
C++ 之父 Bjarne Stroustrup 曾有一篇论文 Learning Standard C++ as a New Language,《程序员》杂志2001年4月号有陈崴的译文《将标准 C++ 视为一个新语言》,把 C++ 和C(它那个好像还不是右派的爹)彻底划清了界限。文章对 C 和 C++ 在 Complexity(复杂度)和 Efficiency(效率)两方面做了比较,指出 C++ 已经完全不同于 C 的观念,并对如何学习标准 C++ 提出建议。有兴趣的朋友可以看看,很有启发性。
C++ 发展至今,其历史已足够写一本书了,Bjarne 的经典名著 The Design and Evolution of C++,详细记述了 C++ 设计和发展过程中(1979-1994)的种种考虑与妥协,它不讲 C++ 是什么样的,它只讲 C++ 为什么会成为这样。不建议初学者去看这本书,实在是咬不动,我当初已经看得头破血流了,而且这本书只讲到1994年为止,多少有些过时了,如果你已比较好地掌握 C++,并想了解其历史,看看倒是有些参考价值。
C++ 虽然起源于 C,语法也比较相似,其迅速成功并成为主流很大程度上也归功于 C 的成功。但经过多年的发展,其最精妙,最有吸引力的部分正是不同于 C 的那一部分。Koenig & Moo 夫妇(Andrew Koenig和Barbara Moo夫妇是C++领域内国际知名的技术专家、技术作家和教育家。)在为想成为更好的 C++ 程序员的人提出的3条建议中第1条就是"避免使用指针",你相信吗?指针正是 C 的核心呀。C 的宏、位运算、结构、联合、数组、强制类型转换、指针,在 C++ 程序中都应该尽量避免(在少量涉及底层的程序设计中例外),C++ 语法上强调的是类、对象、模板、标准库、引用、异常和 const 关键字,思想上强调的是面向对象和泛型。
在 Procedural Programming, Object-Based Programming, Object-Oriented Programming, Generic Programming 中,C 仅仅支持第一种,而就是在 Procedural Programming 的程序中,如果使用了标准库,一个 C++ 程序也可以和实现同样功能的 C 程序完全不同。
Bjarne 曾不止一次强调 C++ 不仅仅是一种 Object-Oriented Programming Language,那是 Java,C++ 是一种集各种编程风格于一身的程序设计语言,Object-Oriented Programming