C++从入门到精通(第6版)
上QQ阅读APP看书,第一时间看更新

1.1 认识C++

要学好编程语言,首先要对这门语言有一定的了解,知道它能做什么,以及怎样才能学好。本节将对C++语言的发展历程、杰出人物和语言特点进行简单的介绍,使读者对C++语言有一个直观的印象。

1.1.1 C++的发展历程

计算机刚发明的时候,计算机专家直接使用二进制数(0和1的序列)作为机器指令进行编程,不但难写难读,而且不同的计算机有着不同的指令集。为了便于记忆,人们尝试用字符串代替二进制机器码,并称之为汇编语言。汇编语言仍然属于低级语言,虽然它比机器码容易记忆,但可读性仍然很差,大量的跳转指令和地址值很难让程序员快速理解其含义。人们急于寻求一种更易于理解、记忆和传播的高级程序语言。

1954年,美国科学家John Backus在IBM公司的计算机上发明了FORTRAN语言,以解决科学和工程计算问题。FORTRAN是第一种被广泛使用的高级语言,随后又出现了Pascal和C语言。C语言是在B语言的基础上发展起来的。首先是Richard Martin发明了一种高级语言BCPL,随后Ken Thompson对其进行了简化,形成一门新的语言——B语言。1970年,AT&T公司Bell实验室的Dennis M. Ritchie对B语言进行了研究和改进,添加了结构和类型,并将这个改进后的语言命名为C语言。

C++是在C语言的基础上,增加了新特性发展而来的。1982年,Bell实验室的Bjarne Stroustrup在C语言中加入了“类”的概念,并将语言名改为C with Class(带类的C)。1983年,Rick Mascitti将其改名为C Plus Plus,也就是今天的C++。

随后的时间里,C++得到了快速发展。1998年,C++标准委员会发布了第一版C++标准——C++ 98标准。2011年,第二版C++标准——C++ 11标准诞生,该标准是颠覆性的,它修正了约600个C++语言中存在的缺陷,同时添加了约140个新特性,这些更新使得C++语言焕然一新。2014年,C++ 14标准发布。2017年年底,C++ 17标准发布。这两个版本都对C++ 11标准库做了进一步的优化和更新。

随着C++的流行,它的语法越来越强大,能够完善地支持面向过程编程(POP)、面向对象编程(OOP)和泛型编程(GP)。C++具有高效、灵活、计算能力和数据处理能力强等优点,被广泛应用于操作系统和系统软件开发、游戏开发、数据库开发、嵌入式系统开发以及大数据分析等领域。

1.1.2 C/C++领域的杰出人物

Dennis M. Ritchie C语言之父、UNIX之父。生于1941年9月9日,哈佛大学数学博士,曾任朗讯科技公司贝尔实验室(原AT&T实验室)下属的计算机科学研究中心系统软件研究部的主任。他开发了C语言,并著有《C程序设计语言》(The C Programming Language)一书,还和Ken Thompson一起开发了UNIX操作系统。他因杰出的工作成就得到了众多计算机组织的公认和表彰,1983年,获得美国计算机协会颁发的图灵奖(又称计算机界的诺贝尔奖),还获得C&C基金奖、电气与电子工程师协会优秀奖章、美国国家技术奖章等多项大奖。

Dennis M. Ritchie

Bjarne Stroustrup 1950年出生于丹麦,先后毕业于丹麦奥胡斯大学和英国剑桥大学,AT&T大规模程序设计研究部门负责人,AT&T贝尔实验室和ACM成员。1979年,Stroustrup开始开发一种语言,当时称为C with Class,后来演化为C++。1998年,ANSI/ISO C++标准建立,同年,Stroustrup推出其经典著作The C++Programming Language的第3版。

Bjarne Stroustrup

Scott Meyers 世界顶级C++软件开发技术权威之一。他拥有Brown University的计算机科学博士学位,其著作Effective C++More Effective C++深受编程人员的喜爱。Scott Meyers曾经是C++ Report的专栏作家,为C/C++ Users JournalDr. Dobb’s Journal撰过稿,为全球范围内的客户提供过咨询活动。他还是Advisory Boards for NumeriX LLC和InfoCruiser公司的成员。

Scott Meyers

Andrei Alexandrescu 新一代C++天才的代表人物。2001年,他撰写了经典名著Modern C++ Design,其中对模板技术进行了精湛运用,并第一次将模板作为参数在泛型编程中使用,该书震惊了整个C++社群,开辟了C++编程领域的Modern C++新时代。此外,他还与Herb Sutter合著了C++ Coding Standards。他在对象拷贝(object copying)、对齐约束(alignment constraint)、多线程编程、异常安全和搜索等领域做出了巨大贡献。

Andrei Alexandrescu

Herb Sutter C++标准委员会的主席,作为ISO/ANSI C++标准委员会的委员,Herb Sutter是C++程序设计领域屈指可数的大师之一。他的Exceptional系列3本书(Exceptional C++More Exceptional C++Exceptional C++ Style)成为C++程序员必读书。他是深受程序员喜爱的技术讲师和作家,是C/C++ Users Journal的撰稿编辑和专栏作者,曾发表了上百篇软件开发领域的技术文章和论文。他还担任Microsoft Visual C++架构师,和Stan Lippman一起在微软公司主持VC 2005(即C++/CLI)的设计。

Herb Sutter

Andrew Koenig AT&T公司Shannon实验室大规模编程研究部门成员,同时也是C++标准委员会的项目编辑,是一位真正的C++权威。Andrew Koenig的编程经验超过30年,其中有15年在使用C++,发表过150多篇和C++有关的论文,并且在世界范围内就C++主题进行过多次演讲。他对C++的最大贡献是带领Alexander Stepanov将STL引入C++标准。

Andrew Koenig

1.1.3 C++语言的特点

C++的开发领域非常广泛,这是因为它具有如下特点:

 C++支持面向过程编程、面向对象编程和泛型编程。就面向过程编程而言,C++和C语言几乎是一样的,因此熟悉C语言的读者学习C++非常容易上手。

 C++语句具有编写简单、易于理解的特点。C++中的运算符十分丰富,共有30多个,如算术、关系、逻辑、位、赋值、指针、条件、逗号、下标、类型转换等。

 C++包括整型、浮点型、字符型、枚举等基本数据类型,数组、结构体、共用体等构造数据类型,指针类型,以及用户自定义数据类型。C++能够实现复杂的数据结构,还可以定义类,实现面向对象编程,而类和指针的结合可以实现高效的应用程序。

 C++中的控制语句形式多样,使用方便。包括两路分支、多路分支、循环结构等控制语句,便于结构化模块的实现。结合面向对象编程,更有利于程序的编制和维护。

 C++是一种面向对象的程序设计语言,抽象和实际相结合,各对象间使用消息进行通信,通过继承方法增加了代码的复用性,适合大型项目的开发。

 C++继承了C语言的特性,可以直接访问地址,进行位运算,从而对硬件进行操作。因此C++同样具有低级语言与硬件结合紧密的优点,适合操作系统和系统软件的开发,以及对运算速度和计算能力要求较高的游戏项目的开发。

 C++语句具有很强的可移植性,用C++编写的程序基本不用修改就可以部署在不同型号的计算机上,C++标准可在多种操作系统下使用。

说明

学习过C语言的读者,几乎已经学习了C++的一半,不需要从头熟悉语法,只需要快速了解C++和C的一些差别,以及面向对象编程和泛型编程即可。