读者可能很熟悉编程和编程语言的基本概念,下面从普遍的意义上简要描述一下本书将用到的一些术语,并阐述C++与其他编程语言的关系。
目前有许多编程语言,每一种语言都有其优缺点,都有其吹捧者和批评者。除了C++之外,读者一定还听说过Java、BASIC(Beginner’s All-purpose Symbolic Instruction Code的首字母缩写)、COBOL(Common Business-Oriented Language的首字母缩写)、FORTRAN(formula translator的前几个字母缩写)、PASCAL(以一位法国数学家Blaise Pascal命名)和C(只是因为它是B语言的后续语言)等编程语言。所有这些统称为高级语言,因为它们可以比较容易地表达出要计算机完成的工作,而且不针对某台计算机。高级语言中的每个源语句一般映射为几个内部机器指令,低级语言比较接近内部机器指令,通常称为汇编语言,一种汇编语言专门用于一种硬件设计,一般一个汇编指令映射为一个内部机器指令。
1.1.1 编程语言简史
FORTRAN是第一种开发出来的高级语言,第一个FORTRAN编译器是在上个世纪50年代后期开发出来的。FORTRAN已有40多年的历史了,目前仍广泛应用于科学和工程计算中,但C++和其他语言也逐渐进入这些领域。
COBOL语言专门用于商务数据处理应用程序,它的历史几乎与FORTRAN语言一样长。目前几乎不用COBOL编写新代码,而是多年前编写的大量代码仍在使用,所以必须维护它们。C++也逐渐成为许多商务数据处理程序的可选语言。
BASIC在上个世纪70年代诞生,那时已经有了个人计算机的概念。有趣的是,Microsoft销售的第一个产品是一个BASIC解释程序。这种语言所固有的易用性使之很快普及,直到今天仍非常流行。
Java是在上个世纪90年代开发的,它最初开发为Oak语言,用于给小型电子设备编程。1995年,Oak演变为Java语言,可以在Web页面中内嵌代码,从那时起直到现在,这已经成为Java的主要用途。Java成功的主要原因是它的可移植性。Java程序可以在任何支持它的硬件平台上运行,而且不需要任何修改。Java语言的语法有许多特性,使它看起来很象C++,但有很大的区别。Java在可移植性方面比C++好,但执行性能比不上C++。
C在上个世纪70年代被开发为一种高级语言,用于低级编程,例如实现操作系统。大多数Unix操作系统就是用C编写的。
C++是Bjarne Stroustrup在上个世纪80年代早期开发的,是一种基于C的面向对象语言。顾名思义,C++表示C的累加。由于C++基于C,所以这两种语言有许多共同的语法和功能,C中所有低级编程的功能都在C++中保留下来。但是,C++比其前身丰富得多,用途也广泛得多。C++对内存管理功能进行了非常大的改进,C++还具有面向对象的功能,所以C在功能上只是C++的一个很小的子集。C++在适用范围、性能和功能上也是无可匹敌的。因此,目前大多数高性能的应用程序和系统仍使用C++编写。
1.1.2 解释性程序和编译性程序的执行过程
无论使用哪种编程语言,编写出来的程序都是由各个指令或源语句构成的,它们描述了希望计算机执行的动作。这些指令或源语句统称为源代码,存储在磁盘的源文件中。任何规模的C++程序都是由若干个源文件组成的。
编程语言的目的是,与计算机可以执行的程序相比,能够更简单地描述希望计算机执行的动作。计算机只能执行包含机器指令(也称为机器代码)的程序,不能直接执行我们编写的程序。用前面提到的语言编写的程序基本上有两种执行方式,在大多数情况下,一种语言会选择其中一种执行方式。例如,用BASIC语言编写的程序通常是解释性的,也就是说,另一个称为解释器的程序会检查BASIC源代码,确定该程序要做什么,再让计算机完成这些动作。如图1-1所示。

图1-1 解释性程序和编译性程序的执行过程
而C++是一种编译语言。在执行C++程序之前,必须用另一个程序(即编译器)把它转换为机器语言。编译器会检查并分析C++程序,并生成机器指令,以执行源代码指定的动作。当然,解释和编译都不像这里描述的那样简单,但其工作原理就是这样。
使用解释性语言,执行过程是间接的,也就是说,每次执行程序时,都需要确定源代码的意图。因此,这种语言比编译语言的对应程序的执行速度慢得多,有时要慢100倍。其优点是在运行之前,不必等待程序的编译。使用解释性语言,一旦输入代码,就可以立刻执行程序。任何一种语言要么是解释性的,要么是编译性的,这通常由该语言的设计和用途来决定。前面说过BASIC是一种解释性语言,但这不是绝对的,目前有许多BASIC语言的编译器。
于是,就有了“哪种语言比较好”这个问题。简单地说,没有所谓“最好”的语言,因为这取决于环境。例如,用BASIC编写程序通常比使用其他语言快得多,所以,如果开发速度比较重要,但执行性能不是很重要,BASIC就是一种非常好的选择。另一方面,如果程序要求具有C++提供的执行性能,或者应用程序需要C++中的功能而不是BAISC,显然就应使用C++。如果应用程序必须在许多不同的计算机上执行,而且执行性能不是很重要,可能Java就是最佳选择。
当然,不同的语言学习起来,所需的时间和难度也不一致。根据学习一种语言所需的时间,C++可能是比较难的,但是不应放弃,这并不是说C++非常难,而是说C++比其他语言难一些,需要较长的学习时间。
学习哪种语言的最后一个要点是,任何专业程序员都需要掌握几种编程语言。如果读者是一位初学者,这可能会使人觉得沮丧,但一旦学习并掌握了一两种编程语言,再掌握其他语言就非常容易了。第一种编程语言总是最难的。
1.1.3 库
每次编写程序时,如果总是要从头开始编写,就相当繁琐。在许多程序中,常常需要某种相同的功能,例如从键盘上输入数据,或在屏幕上显示信息,或按照指定的顺序对数据记录排序。为了解决这个问题,编程语言通常提供了大量预先编写好的代码,以执行标准的操作,这样就不必重新编写这些代码了。
可用于任意程序的标准代码都保存在一个库中。编程语言附带的库跟语言本身一样重要,因为库的质量和使用范围对完成某一编程任务所需的时间有非常大的影响。





