购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第1章
绪论

C++是一门流行的编程语言,它是在C语言基础上发展起来的。从语言角度来说,C++也是一个编程规范,随着C++ 98、C++ 11等规范的发布,许多C++编译器不断涌现,不同的编译器带来不同的语言特性,这给程序员带来了广阔的选择空间。

本章知识架构及重难点如下:

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 Journal Dr. 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的一些差别,以及面向对象编程和泛型编程即可。

1.2 认识C++程序代码

1.2.1 C++程序代码的组成

C++程序代码由宏定义、预编译指令、主函数、自定义函数、注释等部分组成,如图1.1所示。

图1.1 C++语言典型代码

上述代码段虽然简短,却涉及头文件引用、函数作用空间、库函数调用、赋值运算、关系判断、流输出等C++概念。这些概念之间通过一定的规则排列在一起,编译器正是根据这些规则,才能将代码编译成能够在机器上执行的应用程序。本书将对上述概念进行详细的讲解,使大家深入理解C++的编程规范,能够使用C++开发出高效、稳定的应用程序。

1.2.2 从源代码到可执行程序

1.认识编译器

我们平时所说的程序,一般指双击后就可以直接运行的程序,这样的程序又称为可执行程序。Windows系统下,可执行程序的后缀一般为.exe。

可执行程序的内部是一系列计算机指令和数据的集合,它们都是二进制形式的,CPU可以直接识别。但我们使用C、C++、Java、Python等高级语言编写的程序(又称为源代码),对于开发人员来说更易理解,但CPU却无法识别(CPU只认识几百个二进制形式的指令)。这时就需要一个工具,将这些源代码转换成CPU能够识别的二进制指令,即将其“翻译”成.exe可执行程序。该工具就称为编译器(compiler),这个翻译过程就称为编译(compile)。

C/C++编译器有很多种,不同的操作系统下通常使用不同的编译器。例如,Windows平台下常用微软编译器(cl.exr),它被集成在Visual Studio或Visual C++中,一般不单独使用;Linux平台下常用GUN组织开发的GCC;Mac平台下常用LLVM/Clang,它被集成在Xcode中。

开发者编写的代码语法正确与否,由编译器说了算。哪怕有一点小小的错误,也无法通过编译。而且编译器会给出对应的错误提示,以便于开发者修改源代码。

2.从源代码到可执行程序

开发者编写的C++源代码生成.exe可执行程序的过程如图1.2所示。

图1.2 从C++源代码到可执行程序

简而言之,用户开发C++程序的过程,可以简化为编辑、编译、连接、运行4个步骤。

(1)编辑。编辑就是在任一款C++开发工具中输入代码,然后将其保存为.cpp源文件的过程。例如,编辑图1.1中代码,并将其保存为Sample.cpp源文件。

(2)编译。编译就是将代码源文件(.cpp文件)编译成目标文件(.obj文件)的过程。例如,编写好代码后,在任一款C++开发工具中单击“编译”按钮,系统将自动对代码进行编译,得到Sample.obj文件,如图1.3所示。

(3)连接。连接是将编译后的目标文件连接生成可执行程序的过程,如将Sample.obj和lib库文件连接成Sample.exe可执行程序(lib库是编译好的提供给开发者使用的目标模块)。在有多个源文件的工程中,例如有Sample1.cpp、Sample2.cpp、Sample3.cpp,会编译成多个目标模块Sample1.obj、Sample2.obj、Sample3.obj,链接器会将程序涉及的目标模块连接成可执行程序,如图1.4所示。

图1.3 编译文件过程

图1.4 连接过程

(4)运行。运行是执行.exe可执行程序的过程,执行程序后可得到程序运行结果。

1.3 C++常用开发环境

实际C++程序开发中,除了需要编译器,还需要很多其他辅助软件。

编辑器:用来编写代码,并给不同代码着色,以方便阅读。

代码提示器:输入部分代码,即可提示全部代码,提升代码的编写效率。

调试器:观察程序的每一个运行步骤,发现程序的逻辑错误。

项目管理工具:对程序涉及的所有资源进行管理,包括源文件、图片、视频、第三方库等。

漂亮的界面:各种按钮、面板、菜单、窗口等控件整齐排布,操作更方便。

这些工具通常会打包在一起,统一进行发布、下载和安装。它们被统称为C++集成开发环境(IDE),常见的有Visual C++ 6.0、Visual Studio、Dev C++、Xcode、C-Free、Code::Blocks、Eclipse等。

工欲善其事,必先利其器。下面就来介绍几款常用的C++集成开发环境。

1.Visual C++ 6.0

Visual C++ 6.0曾经是最经典的C/C++编译工具,是微软Visual Studio集成开发环境中的一员。目前,微软官方已不再对其进行技术支持和维护。该工具体积小巧,操作简单,对计算机配置要求不高,而且免费,所以目前仍有第三方开发者在进行维护,部分院校在使用它。

2.Visual Studio 2022

Visual Studio是目前较流行的Windows应用程序的商业集成开发环境,其最新版本是2022版。它功能强大,在编译速度上有很大提升;缺点是空间和资源占用大,安装包有2~3GB,对计算机的配置要求较高,而且操作比较复杂。对于初学者来说,很多功能会暂时用不到。

Visual Studio 2022支持C++最新标准规范,支持托管程序的编译和Web Service,更适合大型商业程序的开发。其开发环境如图1.5所示。

3.Dev-C++

Dev-C++是Windows系统下轻量级的C/C++集成开发环境,是将Linux系统的GCC/G++运用到Windows系统后的产物。它遵循C++ 11标准,同时兼容C++ 98标准。Dev-C++功能简洁,易于学习和使用,非常适合初学者和教学使用。其开发环境如图1.6所示。

图1.5 Visual Studio开发环境

图1.6 Dev-C++开发环境

说明

本书中的程序使用Dev-C++进行讲解。

C++开发工具各有优劣,因此初学者不必过于纠结,根据个人的情况选择一个即可。初期学习编程,最重要的是理解语法,弄清C++的内在机理,并通过大量训练培养编程思维,最后再通过一些大型项目积累实战经验。

1.4 C++工程项目文件

数据是以文件的形式存储在磁盘上的,不同类型的文件有着不同的扩展名。

C++代码文件分为源文件和头文件两类。头文件以.h为扩展名,仅包含程序片段或定义的常量、变量等,为程序提供接口;源文件以.cpp为扩展名,提供了程序的主体实现。有的开发环境使用cxx、cHH作为源文件的扩展名。

对一个比较大的工程而言,其源文件和头文件可能比较多。为了管理它们,编译器提供了管理代码的工程项目文件。不同开发环境下的工程项目文件通常会有所不同。

(1)Dev-C++的工程项目文件如图1.7所示。

main.cpp:源文件。

Sample.dev:工程文件。

Makefile.win:make程序执行时使用的文件,用于自动编译源代码文件。

main.o:编译后的目标文件。

Sample.exe:连接后生成的程序。

(2)Visual C++ 6.0的工程项目文件如图1.8所示。

图1.7 Dev-C++的工程项目文件

图1.8 Visual C++ 6.0的工程项目文件

Debug:存储编译后程序的文件夹,带有调试信息的程序。

Release:存储编译后程序的文件夹,最终程序。

Sample.cpp:源文件。

Sample.dsp:Visual C++工程文件。

Sample.dsw:Visual C++工作空间文件。

Sample.ncb:Visual C++用于声明的数据库文件。

Sample.opt:Visual C++存储用户选项的文件。

StdAfx.cpp:向导生成的标准源文件,代码中涉及MFC类库内容时使用该文件。

StdAfx.h:向导生成的标准头文件。

1.5 使用Dev C++创建程序

本书中的程序采用Dev C++进行讲解,所以本节就来认识一下它。

Dev C++是Windows系统下C/C++的集成开发环境,包括多页面窗口、工程编辑器以及调试器等。工程编辑器中集合了编辑器、编译器、链接程序和执行程序,提供高亮语法显示,以减少编辑错误。Dev C++是免安装的,适合初学者与编程高手的不同需求,是学习C或C++的首选开发工具。

1.了解Dev C++主界面

Dev C++主界面由菜单栏、工具栏、项目资源管理器视图、程序编辑区、编译调试区和状态栏组成,如图1.9所示。其工具栏中各图标的用途如图1.10所示。

图1.9 Dev C++的主界面

图1.10 Dev C++的工具栏

2.创建Hello World程序

(1)双击Dev C++安装目录下的 文件,启动Dev C++,然后选择“文件”→“新建”→“源代码”命令,新建一个C++源代码文件。

(2)编写程序代码,如图1.9所示,然后选择“运行”→“编译运行”命令,或按F11键,或单击 图标,运行C++程序。

(3)选择“文件”→“保存”命令或按Ctrl+S快捷键,在“保存为”对话框中设置文件保存位置和文件名称,单击“保存”按钮,保存文件。

注意

为便于阅读代码,读者可自行设置屏幕的背景颜色和文字颜色。右击标题栏,在弹出的快捷菜单中选择“属性”命令,打开“属性”对话框,在“颜色”选项卡中设置即可,如图1.11和图1.12所示。

图1.11 选择“属性”命令

图1.12 “颜色”选项卡 HKzo5KCrBcophF2KdgrEVCwp+8lUvWW8SJYlYU6/Pmq+kTDgdIDxboKdNOsq4+LT

点击中间区域
呼出菜单
上一章
目录
下一章
×