第3章面向对象程序设计语言基础第3章面向对象程序设计语言基础3.1面向对象程序设计语言3.2C++语言基础3.3Java的基础知识第3章面向对象程序设计语言基础3.1面向对象程序设计语言掌握面向对象程序设计,首先应该学习面向对象程序设计语言。当今有很多种编程语言能体现基本的面向对象思想,如C++、Java、Smalltalk、CLOS等,但普遍被推崇的、流行的有两种,即C++和Java。下面将介绍C++和Java的一些基础知识。第3章面向对象程序设计语言基础3.1.1程序程序是有目的的动作序列,它是一种软件。对于程序员来说,程序是以某种语言为工具编制出来的动作序列,它表达了人解决现实世界问题的思想。计算机程序是用计算机程序设计语言所要求的规范书写出来的一系列动作,它表达了程序员要求计算机执行的操作。对于计算机来说,一组机器指令就是程序。我们所说的机器代码或者机器指令,都是指程序,它是按计算机硬件设计规范的要求编制出来的动作序列。在计算机中,程序通常以文件的形式保存。第3章面向对象程序设计语言基础3.1.2语言及其分类语言按其等级可分为高级语言和低级语言。机器语言和汇编语言都是低级语言。程序语言越低级,程序的描写越复杂,越难懂,程序描述的问题越接近机器。最早,程序员使用最原始的计算机指令,即机器语言程序。只有机器语言才能被机器识别和运行,这些指令以一串二进制数表示。不久,发明了汇编语言,它可以将机器指令映射为一些能被人读懂的助记符。以后,各种高级语言迅速发展起来。发展过程中,经历了严酷的优胜劣汰过程,最后剩下一些比较优秀的高级语言。C++作为一种多范型语言,就是一种优秀的高级语言。第3章面向对象程序设计语言基础例如,我们用C++和汇编语言分别来实现表达式a=2b+3c?1,用C++实现为a=2*b+3*c?1;用汇编来实现为moveax,DWORDPTRb_$[ebp]movecx,DWORDPTRc_$[ebp]muleax,2mulecx,3addeax,ecxdeceaxmovDWORDPTRb_$[ebp],eax第3章面向对象程序设计语言基础语言越低级,就表明越靠近机器;越高级,就表明越靠近人的表达与理解、越自然。程序语言的发展,是从低级到高级,直到可用人的自然语言来描述。程序语言的发展也是从具体到抽象的发展过程。从上面的例子中可以看出,作为高级语言的C++在实现表达式时要比汇编语言简洁得多。第3章面向对象程序设计语言基础3.1.3C++是面向对象程序设计语言正如第1、2章所述,程序设计方法正在从结构化程序设计走向面向对象程序设计。C语言能够很好地支持结构化范型程序设计,而C++能够很好地支持面向对象范型程序设计。在第4、5章中将介绍用C++来实现面向对象范型的程序设计。第3章面向对象程序设计语言基础3.2C++语言基础3.2.1C++的发展史C++仅有二十几年的历史,它是C语言的扩展和完善。C语言是贝尔实验室的DennisRitchie在B语言的基础上开发出来的。1972年在一台DECPDP-11计算机上实现了最初的C语言。到20世纪70年代末,C已经演化为现在所说的“传统的C语言”。Kernighan和Ritchie在1978年出版的《TheCProgrammingLanguage》一书中全面地介绍了传统的C语言,第3章面向对象程序设计语言基础1989年美国国家标准协会制定了C语言的标准(ANSIC)。Kernighan和Ritchie编著的第二版《TheCProgrammingLanguage》(1988年版)介绍了ANSIC的全部内容。至此,C语言以其如下独有的特点风靡了全世界:(1)语言简洁、紧凑,使用方便、灵活。C语言只有32个关键字,程序书写形式自由。(2)丰富的运算符和数据类型。(3)C语言可以直接访问内存地址,能进行位操作,能够胜任开发操作系统的工作。第3章面向对象程序设计语言基础(4)生成的目标代码质量高,程序运行效率高。(5)可移植性好。C语言盛行的同时,也暴露出了其局限性:(1)类型检查机制相对较弱,这使得程序中的一些错误不能在编译时发现;(2)C本身几乎没有支持代码重用的语言结构,因此一个程序员精心设计的程序很难为其他程序所用;第3章面向对象程序设计语言基础(3)当程序的规模达到一定的程度时,程序员很难控制程序的复杂性。为满足管理程序复杂性的需要和克服C语言的以上缺点,就必须对C语言进行完善或以一种新的语言来代替C语言,C++就是在这种环境下应运而生的。1980年,贝尔实验室的BjarneStroustrnp开始对C进行改进和扩充。最初的成果称为“带类的C”,1983年正式取名为C++。在对C++进行了三次修订后,于1994年制定了ANSIC++标准的草案,以后又经过不断完善成为目前的C++。C++仍在不断发展中。第3章面向对象程序设计语言基础C++包含了整个C,C是建立C++的基础;添加了对面向对象程序设计(OOP)的完全支持。下面介绍在用C++来实现面向对象程序设计中,必须掌握的C++的关于支持面向对象方面等的语法基础。对C缺乏了解的读者,建议在本书之外,尽快浏览一下C语言的有关内容。第3章面向对象程序设计语言基础3.2.2C++基础语法1.关键字关键字是预先定义好的标识符,这些标识符在C++编写程序的时候,有特殊的含义。在C++中共有61个关键字。在程序设计的过程中应注意,程序中用到的其他名字不能与这些关键字有相同的拼法(包括大小写都不能相同)。表3-1给出了C++中定义的关键字。第3章面向对象程序设计语言基础表3-1C++中定义的关键字staticautobreakunsignedprotectedconstuniondefaultdoubleelseexplictcontinuefloatforgotointlongregistervolatileshortsignedsizeofstructswitchtypedefoperatorcasevoidreturnboolcatchclassconst_castdeleteenumfalseinlinemutablenamespacedynamic_castnewexternprivatepublicthistemplatereinterpret_castthrowturetrytypenameusingvirtualstatic_castwchar_tdoifwhilefriendchartypeid第3章面向对象程序设计语言基础2.基本数据类型在程序中要用到数据,数据常以变量或常数的形式来描述。每个变量或常数都有数据类型。变量是存储信息的存储单元,它对应于某个内存空间,用变量名代表其存储空间,程序能在变量中存储和取出值。数据类型用来告诉编译器应为变量分配多少内存空间、怎样组织已分配的内存空间,以及变量中要存储值的类型。数据类型分为基本数据类型和非基本数据类型。非基本数据类型包括数组、指针和结构等类型。基本数据类型有char、int、float、double、wchar_t和bool等。图3-1描述了C++的数据类型的分类。第3章面向对象程序设计语言基础图3-1中的type表示非空的数据类型,是程序员可以自己定义的数据类型。在图3-1中只是给出了常用数据类型和部分数据类型修饰符,它们用来改变基本类型的意义,用于适应各种情况的需要。修饰符有long(长型符)、short(短型符)、signed(有符号)和unsigned(无符号)等。数据类型修饰符确定了该数据所占内存空间的大小和可表示的数值范围。表3-2是16位计算机中各数据类型所能表示的数值范围。第3章面向对象程序设计语言基础图3-1C++的数据类型整型int字符型单字符型char宽字符型w_char实型单精度型float双精度型double逻辑型bool基本数据类型非基本数据类型数组type[]指针type*空类型void结构struct联合union枚举enum类class数据类型第3章面向对象程序设计语言基础表3-2常用基本数据类型描述类型说明长度(字节)表示范围备注char字符型1-128~127-27~(27-1)unsignedchar无符号字符型10~2550~(28-1)signedchar有符号字符型1-128~127-27~(27-1)int整型2-32 768~32 767-215~(215-1)unsignedint无符号整型20~65 5350~(216-1)第3章面向对象程序设计语言基础signedint有符号整型2-32 768~32 767-215~(215-1)shortint短整型2-32 768~32 767-215~(215-1)longint长整型4-2 147 183 648~2 147 483 647-231~(231-1)float浮点型(单精度)4-3.4×1038~3.4×10387位有效位double双精度8-1.7×1038~1.7×103815位有效位longdouble长双精度16-3.4×104932~3.4×10493219位有效位第3章面向对象程序设计语言基础3.变量定义1)变量名的命名C++中变量的命名应该遵守以下规则:(1)不能是C++关键字;(2)第一个字符必须是字母或下划线;(3)不要太长,一般不超过31个字符;(4)不能以数字开头;(5)中间不能有空格;(6)变量名中不能包含“.;,'+?'之类的特殊符号。(7)变量名不要与C++中库函数名、类名、和对象名相同。第3章面向对象程序设计语言基础2)变量定义方式在给变量命名时,通常用带有描述性的字符串,例如用area命名一个面积变量,用time命名时间变量。这些变量在应用时,程序员和读者对其意义一目了然。例如:intnumber;doublesum;floatlength;第3章面向对象程序设计语言基础3)变量赋值与初始化用赋值运算符“=”给变量赋值。变量初始化是指在定义变量时直接给变量赋值,也可以先定义变量,然后用赋值语句给其赋值。并不是所有的变量都需要初始化,未初始化的变量在编译器编译时并不会出错。例如:unsignedshortwidth;doublearea,radius=23;width=4;其中,变量width先定义后赋值;而变量radius在定义时初始化;变量area未初始化。这些变量在编译时均不会出现错误。第3章面向对象程序设计语言基础4)typedef用typedef可以为一个已有的类型名提供一个同义词,该同义词可以代替该类型在程序中使用。用法是以typedef开始,随后是要表示的类型,最后是同义词和分号。typedef实际上没有定义一个新的数据类型,在建立一个typedef类型时没有分配内存。例如:typedefdoubleprofit;//定义double的同义类型typedefintINT,integer;//定义int的两个同义类型INTa;//同inta;integera;//同inta;profitd;//同doubled;第3章面向对象程序设计语言基础3.2.3常数1.实数常数实数常数的表示方法有两种:(1)十进制小数。它由数字和小数点组成,如0.123,0.234,0.0等都是十进制数。(2)指数形式。如:425e4或425E4表示425×104。要注意E或e的前面必须是数字,且E或e后面的指数必须为整数。第3章面向对象程序设计语言基础实数型常数常分为单精度(float)、双精度(double)和长双精度(longdouble)3类。在16位计算机中,float型数据在内存中占4个字节,double型数据在内存中占8个字节,longdouble数据类型在内存中占16个字节。float型提供7位有效数字,double型提供15位有效数字,longdouble提供19位有效数字。在C++中,一个实数如果没有说明,则其类型为默认类型double型。要表示float型数,则必须在实数后面加上F或f;要表示longdoub