C++程序设计基础(第4版)(上)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-03 12:18:31

点击下载

作者:周霭如,林伟健

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

C++程序设计基础(第4版)(上)

C++程序设计基础(第4版)(上)试读:

前言

C++语言是优秀的计算机程序设计语言,它的功能相当强大。我们编写这本书的目的是,为没有任何程序设计基础的理工科大学生提供一本适用教材,使他们掌握从理论到实践都要求很高的C++语言。

一门课程的设置应该放在整个教学培养计划中统筹考虑。我们的教学目标不是马上培养一个会使用某种语言(例如C++语言)的程序员,而是强调对程序设计语言的理解和应用,“计算机语言”的角色是第一位的。所以,在教材编写和组织教学的过程中,我们力图通过对基本语法现象的剖析,由浅入深地让学生理解、掌握语言规则的原理,懂得用计算机指令的模式去分析和求解问题,并在机器上实现简单的程序。至于深入的算法及大程序的组织讨论,将由相关的后续课程(例如,数据结构、算法分析、计算方法、软件工程等)完成。因此,对高级程序设计语言规则的理解和应用是本教材写作的立足点。

我们根据多年从事计算机程序设计教学的经验,按照学生学习的认知规律,精心构造整本教材的体系和叙述方式。原则是:循序渐进、难点分散、通俗而不肤浅。本教材以语法范畴和程序组织为脉络,清晰渐进。从字符、词汇、数据、表达式、语句,到函数、类,是语法范畴构成的基本脉络;在程序功能方面,则以组织数据和组织程序为另外一条基本脉络,并以渐进的、粒度扩大的方式逐步导入分析。

例如,数据的组织方式:基本数据类型—数组—结构—链表,体现如何利用基本数据类型根据需要组织数据;程序的组织方式:语句—函数—类,体现结构化思想和面向对象思想对程序不同的组织方式。

指针是C++语言的重要概念,是操作对象的有力工具。本书没有一般C语言、C++语言教材中专门的“指针”一章。我们从最简单的变量开始,建立对象的名和地址的概念,用对象的不同访问方式贯穿于各章节。从结构化程序设计到面向对象程序设计,采取了比较平滑的过渡。首先,在一开始介绍基本数据类型、程序流程控制、函数等结构化程序设计的基本知识时,就非正式地使用“对象”这个术语(从计算机程序的角度,任何占有存储空间的实体都是对象);继而,掌握结构到类的演变,给出对象的准确定义;进一步,展开介绍面向对象程序的几个基本特性,即封装、继承、多态和类属在C++语言中的实现方法。同时,我们在本书的阐述中体现一个思想:没有一种对所有问题都是最好的程序设计方法,对特定问题,选择合适的解决方案是程序员必备的素质。

本书之所以取名为《C++程序设计基础》,原因有二:第一,它不是一本C++语言手册,不可能包罗所有语法规则和特定版本提供的各种功能;第二,它没有涉及复杂的算法和工程化的面向对象分析设计方法。这两个问题与教材的定位相关。对第一个原因,我们认为学生在掌握了程序设计的基本概念和基本方法之后,可以通过语言平台(例如Visual C++)或者其他资料学习,拓展对语言功能的了解。我们在有关章节中,也做了类似的引导,例如,STL标准类库的介绍,这些内容提供给教师选择或学生自学。至于第二个原因,那些是计算机专业后续课程的教学内容。本书介绍的程序设计方法和使用到的算法都立足于基本概念和方法,所以,例程通常是简单和小规模的。

本书分别在 2003 年、2006 年和 2009 年出版了第 1~3 版。目前修订的第 4 版教材的例程以VC2010 为运行环境,全书分为上、下两册。上册在第3 版的基础上增加了位运算和利用位运算的集合实现。下册介绍VC++在.Net环境下的Windows应用程序设计。编写下册教材的原因是,学生在掌握了C++程序设计基本语法之后,希望能够设计一个Windows界面的完整的应用程序。

上册共分12章,主要内容包括:基本数据与表达式、程序控制结构、函数、数组、集合与结构、类与对象、运算符重载、继承、虚函数与多态性、模板、输入/输出流、异常处理。

本书配套的电子课件和习题解答,请登录华信教育资源网下载(http://www.hxedu.com.cn)。该电子课件由近3000张PPT幻灯片组成,以图形语言为设计理念,充分表达程序设计课程的教学特点。

本书可以作为高等学校计算机类、信息类、电类专业本科生高级语言程序设计课程教材,也可以作为教师、学生和C++语言爱好者的参考书。

为了节省版面,程序在不影响结构阅读的情况下,以比较紧凑的方式排版。例如,一对花括号“{”和“}”会出现在同一程序行中。

本书的编写过程,是作者不断向学生学习,向同行学习,向C++学习的过程。在此,对所有使用本书的教师、学生,以及热心向我们提出宝贵意见的读者致以诚挚的感谢!希望继续得到读者的支持和帮助。

编著者

2012年5月第1章 基本数据与表达式

程序设计语言是人指挥计算机工作的工具。C++语言功能强大,使用灵活,是目前工程中应用比较广泛的一种高级程序设计语言。本章介绍高级程序设计语言的基本概念、C++语言的基本语法单位及表达式运算。1.1 概述

C++语言源于C语言。C语言诞生于20世纪70年代,最初设计的目的是编写操作系统。因为C语言规则简单,不但具有高级语言的数据表示、运算功能,还可以直接对内存操作,程序运行效率高。基于以上优点,C语言很快成为世界流行的程序设计语言。

然而,人们要求计算机解决的问题越来越多,C语言在处理大问题、复杂问题时表现出来的弱点也越来越明显,例如,缺乏数据类型检查机制,代码重用性差等。

20世纪80年代,美国AT&T贝尔实验室对C语言进行扩充改版,成为C++语言。C++语言保持了C语言原有的高效、简洁的特点,强化了数据的类型检查和语句的结构性,增加了面向对象程序设计的支持。由于C++语言的灵活性、良好的继承性和前瞻性,许多软件公司都为C++语言设计编译系统,提供不同级别的应用类库以及方便实用的开发环境,使C++语言得到广泛应用。1.1.1 程序设计与程序设计语言

在人类社会生活中,“语言”是人与人之间用来表达意思、交流思想的工具,是由语音、词汇和语法构成的一定系统。人类的思维、感情相当丰富,所以,人类的语言系统非常复杂。甚至同一个词、同一个句子,在不同的环境下、以不同的语气表达,都可能解释成完全不同的意思。“程序设计语言”是人指挥计算机工作的工具。它是一种工程语言,由字、词和语法规则构成的指令系统。一种高级程序设计语言往往只有一百多条词汇、若干条规则。

高级语言提供了常用的数据描述和对数据操作的规则描述。这些规则是“脱机”的,程序员只需要专注于问题的求解,不必关心机器内部结构和实现。我们说的“程序设计语言”一般是指高级语言。

计算机对问题的求解方式通常可以用数学模型抽象。随着社会科学的发展,人们要求计算机处理的问题越来越复杂,计算机工作者不断寻求简洁可靠的软件开发方法。从过程化、结构化到近代出现的面向对象程序设计,体现了程序设计理论、方法的不断发展。

用高级语言编写的程序称为“源程序”。计算机不能直接识别源程序,必须翻译成二进制代码才能在机器上运行。一旦编译成功,目标程序就可以反复高速执行。

程序设计就是根据特定的问题,使用某种程序设计语言,设计出计算机执行的指令序列。程序设计是一项创造性的工作,根据任务主要完成以下两方面工作。(1)数据描述

数据描述是指把被处理的信息描述成计算机可以接受的数据形式,如整数、实数、字符、数组等。

信息可以用人工或自动化装置进行记录、解释和处理。使用计算机进行信息处理时,这些信息必须转换成可以被机器识别的“数据”,如:数字、文字、图形、声音等。不管什么数据,计算机都以二进制数的形式进行存储和加工处理。数据是信息的载体,信息依靠数据来表达。

有一些数据,可以直接用程序设计语言的“数据类型”描述,如:数值、字符。另外一些数据,虽然一般的程序设计语言没有提供直接定义,但许多开发商都会提供相应的处理工具。例如,Visual Studio.NET Framework类库提供了丰富的多媒体数据处理方法,可以在界面或程序代码中使用或处理图形、声音等数据。(2)数据的处理

数据处理是指对数据进行输入、输出、整理、计算、存储、维护等一系列活动。数据处理的目的是为了提取所需的数据成分,获得有用的资料。

程序设计语言的规则都是围绕描述数据、操作数据而设计的。在结构化程序设计中,数据的描述和处理是分离的。用面向对象方法,程序对数据和处理进行封装。按照人们习惯的思维模式和软件重用原则,对象还具有继承、多态等特性。每种程序设计方法都有自己的一套理论框架,相应的设计、分析、建模方法,都有各自的优缺点。采用什么方法设计程序,应该依据问题的性质、规模、特点进行选择。世界上没有一种能解决所有问题的最优方法。

学习C++语言,不仅为了掌握一种实用的计算机软件设计工具,更重要的是,通过该课程学习,掌握计算机程序设计语言的基本语法规则,掌握结构化程序设计和面向对象程序设计的基本方法,为进一步学习和应用打下良好基础。1.1.2 一个简单的C++程序

问题:输入圆的半径,求圆的周长和面积。【例1-1】方法一,用结构化方法编程。

数据描述:半径、周长、面积均用浮点型数据表示。

数据处理:

输入半径r;

计算周长=2*π*r;

计算面积=π*r*r;

输出半径,周长,面积。

可以编写如下程序:

上述程序运行后,屏幕显示:

用户输入:

6.23

程序继续执行,计算并输出结果:

radius=6.23

girth=39.1431

area=121.931

若再次运行程序,可以输入不同的半径值,求得不同圆的周长和面积。

这个程序很容易读懂。第1行称为预编译指令,说明该程序要使用的外部文件。C++语言标准头文件iostream包含了程序常用的输入cin和输出cout的定义。

第2行是使用名空间的声明。using和namespace都是关键字,std是系统提供的标准命名空间。详细说明见3.8节。

C++语言以函数为程序运行的基本单位,函数的一般形式为:“函数名”是标识符,用于识别和调用函数。用户自定义函数由程序员命名。一个程序可以由多个文件组成,一个文件可以包含多个函数。每个程序必须有一个,而且只有一个主函数,因为主函数是由系统启动的。最简单的程序只由主函数构成。main是系统规定的主函数名。“函数名”之前的“类型”表示函数运行返回表达式值的数据类型。C++主函数返回类型一般为int或void。“函数名”之后一对圆括号相括的是函数参数。如果没有参数,圆括号也不能省略,它是C++函数的标识。函数名、函数返回类型和参数表组成C++的函数头(或称为函数首部)。

函数头之后以一对花括号相括的“语句序列”构成函数体。C++语句以分号结束,一行可以写多条语句,一条语句可以分多行写。程序按语句序列执行。

花括号也可以出现在语句序列中。这时,花括号相括的语句称为复合语句或语句块。根据语句的功能不同,有说明语句、执行语句、流程控制语句等。

以双斜杠“//”开始的文本为程序注释,放置在行末。以“/*…*/”相括的注释文本可以放置在程序的任何位置。注释内容不是执行代码,用于增加程序的可读性。系统只显示注释内容,不予编译。

有关函数定义和使用,参见第3章的相关内容。【例1-2】方法二,用面向对象方法编程。

当我们用对象思维考虑问题时,可以对问题进一步抽象。所有称为“圆”的这种类型的几何图形,最基本的要素是半径。它决定了圆的大小,也是区分具体圆A、圆B、圆C等的基本数据。一旦定义了具体的有半径值的圆,就有它特定的周长和面积了。“圆”是一种类型。在面向对象方法中,称为“类类型”或“类”。“圆”类型的基本数据是“半径”。类的数据称为“属性”或“数据成员”。

数据成员有了具体的值之后,就可以计算周长和面积了。这种“计算”由程序代码实现,并且“封装”在类中,称为类的“方法”或“成员函数”。

下面是用这种方法编写的C++程序:

该例程首先说明一个类 Circle。类中数据成员 radius 用于定义半径。成员函数 Set_Radius用于设置半径的值,Get_Radius获取半径,Get_Girth计算并返回圆周长,Get_Area计算并返回圆面积。

主函数中说明了圆类Circle的两个圆:A和B。A和B称为Circle类的实例或对象。main函数中由对象调用成员函数输出两个圆的半径、周长和面积。

这个程序比例1-1看起来要烦琐一些。但是,以Circle类为基础,可以很方便地派生新的类。新的类对原有类的特性不需要重定义,可以自己定义新的数据,例如,指定圆心坐标,填充圆的颜色;派生出球体、圆柱体等新的几何体。每个新类都可以拥有自己的成员函数,实现自己特有的功能,这是结构化程序设计方法所做不到的。面向对象技术提供了软件重用、解决大问题和复杂问题的有效途径。1.1.3 程序的编译执行

用高级语言编写的程序称为“源程序”。源程序是文本文件,便于阅读修改。C++的.cpp文件是文本文件,可以用各种字处理工具打开和编辑。计算机不能直接识别源程序,必须翻译成二进制代码才能在机器上运行。翻译方式有两种:一种称为解释方式,另一种称为编译方式。解释方式是指由“解释程序”对源程序逐条语句地一边翻译,一边执行。这种方式执行速度慢,便于观察调试程序。编译方式是指由“编译程序”把源程序全部翻译成二进制代码。编译后的程序称为“目标程序”,可以反复高速运行。每一种高级语言都配有解释或编译系统。

C++提供编译执行方式。实现一个C++语言源程序主要经过以下3个步骤。

1.编辑

使用C++语言编辑器或其他文字编辑器录入源程序。若使用C++语言编辑器,则系统自动生成.cpp 文件扩展名;若使用其他文字编辑器,则只有以.cpp 为扩展名的文件才能被 C++语言识别。.cpp文件是文本文件。

2.编译

把一个.cpp文件编译成.exe目标文件,要经过预处理、编译和连接3个步骤:预处理的作用是执行程序编译之前的准备,例如执行包含指令、宏替换命令;然后编译器对程序进行语法检查,如果发现语法错误,则显示错误信息,让程序员修改,直至正确,生成目标代码;最后把目标代码进行连接处理,往往还会加入一些系统提供的库文件代码。

这些步骤在集成开发环境中会自动完成。

3.运行

VC.NET 用文件夹管理应用程序。经过编译后,应用程序文件夹中有一个扩展名为.sln 的解决方案文件,需要在C++环境下执行。还生成一个debug文件夹,里面有一个.exe文件,可以直接在操作系统(如 DOS,Windows)环境下执行。为了便于测试程序,C++提供了强有力的跟踪调试和错误处理功能。源程序和目标程序都能够作为文件永久保存。

编写源程序难免存在一些错误,这些错误可以分成以下4类。

① 编译错误:在编译源程序时发现的语法错误。例如,表达式(a+b*(c-d)缺少了右括号。

② 连接错误:在程序编译之后,进行连接时出现的错误。例如,找不到连接库文件。

③ 运行错误:执行目标程序时发现的错误。例如,执行标准函数 sqrt(x),求 x 的平方根,而x的值为负数。

④ 逻辑错误:编译和运行时均不能发现的错误。例如,执行表达式 2/4,期望值是 0.5,但C++作整除运算,结果为0。

一个程序经常要经过反复的调试、验证会才能完善,投入使用。因此,编写的程序应该力求达到以下目标。

① 正确性:这要求程序员熟悉所使用的程序设计语言,避免语法、语义上的错误;设计简单易行的算法达到预期目的;对复杂的问题,则应考虑使用有效的程序设计方法。

② 易读性:一个程序结构清晰易读,才能便于查错,便于修改。一个程序模块耦合度低、接口清晰,才便于代码的重用。

③ 健壮性:当输入或运行出现数据错误时,程序能够做出适当的反应或进行处理,而不会产生莫名其妙的结果。

④ 运行高效率:程序运行时间较短,而且占用的存储空间较小。

为达到以上目标,需要我们在不断学习和实践中提高程序设计水平。“程序”是人的智力产品。从理论上说,程序是永远不会损坏的。实际上,程序在整个生存周期都会根据需要进行修改、维护,都可能产生错误。所有的硬件产品都允许有误差,但程序错误是不允许的,它有时甚至会产生悲剧性的后果。程序的生产和维护比硬件产品复杂得多。所以,计算机科学界期望有一套工程化的方法进行程序的开发维护。为了体现这种工程思想,程序就要伴随着一套开发、维护、使用的文档。程序加上这些相关文档称为软件。1.2 C++语言的字符集与词汇

所有的语言系统都是由字符集和规则集组成的。“字符”是语言的不可分解的最基本语法单位。按照规则,由字符可以组成“词”,由词组成“表达式”、“句子”,由各种句子又可以构成“函数”、“程序”。我们学习一门语言,就是要掌握程序设计语言的规律以及如何根据实际问题应用规则编写程序。1.2.1 字符集

C++语言的字符集是ASCII(American Standard Code for Information Interchange)码的子集,包括:

26个小写字母 abcdefghijklmnopqrstuvwxyz

26个大写字母 ABCDEFGHIJKLMNOPQRSTUVWⅩYZ

10个数字 0123456789

其他符号(空格)!"#%&'()*+-/:;<=>?[\]^_{|}~.1.2.2 词汇

单词是语言中有意义的最小语法单位。根据构成规则,一个单词由一个或多个字符组成。下面介绍C++语言的词汇。

1.关键字

关键字又称保留字。关键字是系统预定义的语义符。C++语言不允许对关键字重定义。根据语言版本不同,关键字会有所增减。

下面列举出C++语言常用的关键字。全部关键字可查阅MSDN帮助文档。

array bool break case catch char class const continue default delete do double else enum extern false float for friend goto if inline int long namespace new nullptr operator private protected public return short sizeof static struct switch template this throw true try typedef typename union unsigned virtual void while

2.标识符

标识符是由程序员定义的命名符。例如,常量、变量、对象、函数、类型、语句标号等的命名。

C++标识符语法是:以字母或下画线开始,由字母、数字和下画线组成的符号串。

注意:① 关键字是特殊的标识符,C++规定不能使用关键字作为用户标识符。

② C++语言中,字母大小写敏感。例如,Aa和aa是两个不同的标识符。

③ C++语言没有规定标识符的长度(即字符个数)。但不同编译系统有不同的识别长度,例如,有的系统识别32个字符。【例1-3】判断以下标识符的正确性。

合法标识符有:a x1 no_1_a2c sum Name

不合法标识符有:2a x+y α π a,b a&b const

标识符命名除了符合上述规则外,应该尽可能做到“见名知义”,以提高程序的可读性。例如,年龄用age,名字用name,总和用sum等。

3.运算符

运算符是对数据进行操作的简洁表达,以单词的形式调用系统预定义函数。许多符号与数学中的相同。例如:

+加-减*乘/除>大于<小于

>=大于或等于<=小于或等于==等于!=不等于

4.分隔符

分隔符用于在程序中分隔不同的语法单位,便于编译系统识别。例如,有说明语句:

int a,b,c;

其中的空格、逗号和分号都是分隔符。int和a之间不能省略空格,否则,C++编译器无法分离关键字int和标识符a。

如果一条语句中不同类型的单词连接在一起,编译器能够通过语法规则进行辨别,就不需要另外添加分隔符。例如,算术表达式

x+y

由3个单词:标识符x、y和运算符“+”组成。“+”既是运算符,也是分隔符,分隔了不同语法规则的标识符,所以x和y之间不需要插入空格。如果插入空格,编译器会自动滤掉。

除此之外,常用的分隔符还有:空格、逗号、分号、冒号、括号、注释符等。

5.常数

常数是指按照特定类型语法规则解释的数据值。C++语言常数有数值、字符和字符串。数据的书写形式表示了它的类型和值。例如,以下数据都是常数。

基本类型的常数在程序运行时直接参与运算,不需占用内存单元存储。各种类型数据的语法规则详见1.3节。1.3 C++语言的基本数据类型与存储形式

分类是我们日常生活中经常碰到的事情。分类指的是把具有相同特征(称为属性)的对象集合抽象为一种“类型”,并且具有一个特定的类型名作为标识。例如,人、学生、树、书、房子等都是类型,而不特指某一具体对象。任何东西都可以归属于某种类型,各个对象以不同的特征值相区别。例如,书的主要属性有:书名、作者、出版社、出版日期。如果特指某本书,这些属性就必然具有特定的数据值。

在程序设计中,数据“类型”是对数据的抽象。类型相同的数据有相同的表示形式、存储格式以及相关的操作。

例如,“整型”数据是计算机表示整数的子集,整数类型的名字是int,以4字节(32二进制位)存储,表示数值范围为-2 147 483 648~2 147 483 647。整数可以参与+,-,*,/等算术运算。

程序中使用的所有数据都必定属于某一种数据类型。1.3.1 C++语言的数据类型

C++语言的数据类型表示如图1.1所示。

基本类型是系统用于表示可以直接处理的数据值。结构类型是由一些其他类型按一定规则组合而成的。

指针是一种特殊的简单数据类型,用于表示对象的地址值。图1.1 C++语言的数据类型

空类型不是值意义可以直接解释的数据类型,它用于表示函数无返回值,或指针所指对象无结构。此时需要通过强类型转换才能解释数据。1.3.2 数据存储

所有信息在计算机中的存储都采用由0和1组成的代码。内存以字节为基本存储单位,1字节是8位二进制位。例如:

0000 0000 1010 1011

表示2字节的二进制数。

不同类型数据占用不同长度的存储空间。例如,字符型(char)数据占1字节,整型(int)占4字节。

不同类型数据的存储长度和格式的不同,决定了数据的示数范围和精度不相同。例如:

2字节表示的短整型数(short int),示数范围为-32 768~32 767;

4字节表示的整型数(int),示数范围为-2 147 483 648~2 147 483 647;38

4 字节表示的单精度浮点型(float),示数范围为-3.4×10~3.438×10,示数精度约为 6 位有效数字;308

8字节表示的双精度浮点型(double),示数范围为-1.7×10~3081.7×10,示数精度约为12位有效数字。

另外,在内存中,同一个二进制位串可以用不同的类型解释,因而会表示不同的值。例如,二进制位串:

0000 0000 0100 0001

解释为int类型时,值为整数65;解释为char类型时,表示两个字符:一个空字符和一个字符A。

定义一个变量时,计算机根据变量的类型分配存储空间,并以该类型解释存放的数据。1.3.3 基本数据类型

基本数据类型是语言系统预定义的,用户可以直接引用。本章首先介绍C++语言的基本数据类型,其他数据类型将在后续章节中逐步介绍。

表1.1以32位字长机器为例,给出C++语言基本数据类型描述。如果机器字长16位,则示数范围和精度会有所不同。表中方括号括起来的内容表示在说明语句中可以省略。表1.1 C++语言基本数据类型注:short,signed,unsigned,long称为修饰符。short只能修饰int,long只能修饰int和double,signed和unsigned只能修饰char和int。

1.整型(1)int

C++的int数据类型按示数范围不同分为:短整数(short int)、有符号短整数(signed short int)、无符号短整数(unsigned short int)、有符号整数(signed int)、无符号整数(unsigned int)、长整数(long int)、有符号长整数(signed long int)、无符号长整数(unsigned long int)等。

除了用十进制数形式表示数据外,C++还可以用八进制数和十六进制数形式表示正整数。

十进制整数是带或者不带正负号,没有小数点,由数字0~9组成的符号串。C++的十进制整数不能以0开始。例如,305、-1094、+7256都是合法的十进制整数。

后缀L(或l)表示长整数,后缀U(或u)表示无符号整数。例如:

八进制数是以 0 为前缀,没有小数点,由数字 0~7 组成的符号串。八进制数只能表示正整数。例如:

十六进制数是以0x(或0Ⅹ)为前缀,没有小数点,由0~9及a~f(或A~F)组成的符号串。十六进制数只能表示正整数。例如:(2)bool

C++的逻辑类型用关键字bool定义。逻辑类型只有两个值true和false。

逻辑数据用于表示判断的结果是否成立,所以只有两个可能值。例如,“1 大于 3”,这种情况不成立,判断结果为false。“2+3等于3+2”这种情况成立,判断结果为true。

在C++语言中,逻辑值true和false实际上是用整型值1和0参与运算。【例1-4】输出逻辑数据值。

程序运行结果:

false:0

true:1(3)enum

枚举类型是一种用户自定义的数据类型,用关键字 enum定义,是用标识符表的序号表示的数据。【例1-5】输出枚举类型数据值。

程序运行结果:

red:0

blue:2

black:4

2.浮点型

浮点型又称实型,即我们通常所说的实数。浮点数由整数部分和小数部分组成。

浮点数有两种示数形式:小数示数法和指数示数法。

小数示数法又称常用示数法,由数字和小数点组成。例如:

指数示数法又称科学示数法,由尾数、指数符和指数组成:

尾数 E|e 指数

其中,“尾数”可以是整数或小数,“指数”必须是整数。指数符可以为E或e,表示以10为底的指数。对于一个用指数示数法表示的浮点数,尾数和指数都不能省略。例如:

C++语言的浮点数有3种:单精度浮点型(float)、双精度浮点型(double)和长双精度浮点型(long double)。不加后缀的浮点数默认为double型,float型数据后缀为F或f,long double型数据后缀为L或l。例如:

3.字符型

字符型的类型标识符是char。字符型数据为一对单引号相括的一个字符。例如:

注意,'A'表示字符,A 表示标识符,'4'表示字符,4表示整数值。

除了直接用字符表示字符型数据外,还可以在ASCII码的八进制数值、十六进制数值之前添加转义符反斜杠“\”,表示把它们的值转换成字符。

其中,ddd是1~3位八进制数,hh是1~2位十六进制数。此时,八进制数值和十六进制数值略去前缀0,因为嵌入字符串时,'\0'表示空字符。这种情况特别适用于表示一些不可见的控制符。例如:

注意空字符与空格字符的区别。空字符的ASCII值为0,空格字符的ASCII值为32。

对一些常用的控制符,C++语言用简洁的转义符代替。例如,换行符表示为'\n',制表符表示为'\t'等。

在程序中为了表示已经用做语义符如“\”、“'”、“"”等的字符值,要在这些字符前添加“\”转义:

例如,执行语句:

屏幕的显示结果为:

表1.2列出C++常用的转义字符。表1.2 C++语言常用转义字符续表

C++没有把字符串作为基本类型。字符串常量是用双引号相括的字符序列,以数组形式存放。例如,以下都是字符串常量:

系统在内存存放字符串时,除了每个符号占一个字节外,还自动添加一个空字符'\0'作为串结束标志。所以,字符'x'和字符串 "x" 的数据类型和存储形式不一样。1.4 数据对象与访问

程序中必须使用一些内存单元存放数据。程序的代码可以读出或改写这些存储单元的内容,对内存的读、写操作称为访问。

程序可以用标识符命名指定存储单元。若定义的内存对象既能读又能写,则称为变量;一旦把数据存入内存单元,程序中就不能修改的对象称为常量。通常,一些直接表示的数值,例如,256、0.025等数值称为常数或直接常量。

C++可以用对象名,也可以通过对象的地址访问对象。1.4.1 变量定义

变量是存储数据的内存单元。变量定义的作用是要求编译器在内存申请指定类型的存储空间,并以指定标识符命名。

变量说明的语句格式为:

其中,“类型”为各种合法的C++类型;“标识符表”可以为一个或多个用逗号分隔的变量名。

例如,有以下变量说明语句:

若一个变量仅被说明而未赋值,则它的存储值是无意义的随机状态。在变量说明的同时可以赋初值:

在程序中,一个变量被赋值后,就一直保留,直到对它再次赋值修改,例如:1.4.2 访问变量

程序运行时占有内存的实体,包括数据(常量、变量)、代码(函数)都可以称为对象。数据是程序处理的对象,程序是编译器的处理对象。“对象”是一个广义的概念。对对象的访问包括对内存相关单元内容的读和写操作。

内存单元由操作系统按字节编号,称为地址。当程序出现常量或变量说明语句时,编译器按类型分配存储空间,把地址写入标识符表。标识符就是获得分配的内存单元的名字。

例如,对已经说明的变量:

int a;

内存状态示意如图1.2所示。标识符a是变量名,按照类型int分配4字节存储空间,第1字节的地址0x8FC6FFF4称为变量a的地址。地址值是系统分配的,不能由高级程序设计语言决定,但C++可以通过代码获取对象被分配的地址值。

在内存建立一个对象后,可以用名方式和地址方式访问。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载