资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C+,面向对象程序设计,第一章,本章导读:,C,是面向过程的程序设计语言,也就是说,C,程序的设计首要考虑的是如何通过一个过程,而对于,C+,,程序设计首先要考虑的是如何构造一个“模型”,这里的“模型”也称之为“对象模型”,因此,C+,是面向对象的程序设计语言。许多多人都把,C+,称为“带类的,C”,。的确,,C+,是在,C,的基础上引入面向对象的“类”的机制而形成的一门程序设计语言。,C+,既支持面向过程的程序设计,又支持面向对象的程序设计。,面向对象的程序设计方法具有三大特征:封装性、继承性和多态性,其基本思想是尽可能模拟人类的自然思维方式来构造软件系统,不仅可以提高对用户需求的适应性,而且支持软件复用。,本章要点,了解面向对象程的思想,掌握面向对象中出现的基本概念,掌握面向对象中出现的基本特征,掌握面向对象程序设计的优点,第,1,章 面向对象程序设计语言概述,1.1,面向对象程序设计概述,1.2,面向对象程序设计的特点,1.3,面向对象的系统开发方法,1.4,程序举例,1.5,本章小结,习题一,1.1,面向对象程序设计概述,软件工程学家,Coad/Yourdon,认为:面向对象对象类继承消息。,如果一个计算机软件系统采用这些概念来建立模型并予以实现,我们就说它就是面向对象的。下面我们将阐述面向对象的程序设计和面向对象的设计方法。,1.1.1,面向对象程序设计,面向对象程序设计(,Object Oriented Programming,,缩写:,OOP,),指一种程序设计范型,同时也是一种程序开发的方法论。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。,当我们提到面向对象的时候,它不仅指一种程序设计方法。它更多意义上是一种程序开发范式。在这一方面,我们必须了解更多关于面向对象系统分析和面向对象设计(,Object Oriented Design,,简称,OOD,)方面的知识。,面向对象程序设计的雏形早在,1960,年的,Simula,语言中即可发现,当时的程序设计领域正面临着一种危机:在软硬件环境逐渐复杂的情况下,软件如何得到良好的维护?面向对象程序设计在某种程度上通过强调可重复性解决了这一问题。,20,世纪,70,年代的,SmallTalk,语言在面向对象方面堪称经典,以至于,30,年后的今天依然将这一语言视为面向对象语言的基础。,面向对象程序设计可以被视作一种在程序中包含各种独立而又互相调用的单位和对象的思想,这与传统的思想刚好相反:传统的面向过程程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,或者说是负有责任的角色。,目前已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,并且在大型项目设计中广为应用。,1.1.2,面向对象的软件工程,传统的软件工程方法曾经给软件产业带来了巨大进步,部分缓解了软件危机。但随着人们对软件产品的需求日益增加,其缺点越来越突出。为了克服传统软件开发的缺点,,20,世纪,70,年代提出了面向对象方法,现在它已经有很广泛的应用。面向对象软件工程是面向对象方法在软件工程领域运用的结果。,1.1.3,面向对象的主要概念,1,对象,2,类,3,封装,4,继承,5,消息,6,多态性,1,对象,对象是一个实体,可以是现实世界中具体的物理实体或概念化的抽象实体。,在现实生活中,任何事物都是对象,具体存在的事物比如一个学校是对象,桌、椅是对象,抽象是事物比如规章制度也是对象。对象既可以很简单,也可以很复杂。一般一个对象都有一个区别于其他事物的名字,也有描述它特征的属性,以及一组操作,这组操作既可以是自身所承受的,也可以是施加给其他对象的。,在面向对象程序设计中,对象是一个封装数据(属性,静态特征)和操作(服务,动态特征)的实体,是构成系统的基本单元。当用户使用一个对象的时候,只能通过对象所提供的对外界的接口进行访问,而不必知道它的操作方法,就象我们知道的黑匣子一样,你可以使用它提供的接口,却不用内部的构造。这就大大方便了用户的使用,使对象的使用变的十分简单,同样,因为在外面看不到对象的内部,更无法对它进行修改,因而也有很高的安全性和可靠性。,2,类,类是具有相同属性和相同操作的对象的集合,是抽象数据类型的实现。在此我们定义一个学生类,众所周知,学生所具有的属性一般有姓名,学号,性别,成绩等,相应的操作有入学,修改,显示,毕业等等。当入学时,的有一定的操作将此学生的信息加入大学生类中,而毕业是应该撤消其相应的信息。具体到每个学生则是学生类的一个实例,也就是一个对象。,可以说,对象的抽象是类,类的实例是对象。在客观世界存在的是类的实例,即对象。比如上例中的学生,我们通常不说抽象的“学生”,而是一个个具体的学生,他们有着自己的姓名,学号等等。,在面向对象的程序设计中,总是先声明类,再定义此类的对象,类是创建对象的模板,给出了属于该类的全部对象的抽象定义。就像大批量生产某种产品时,我们总是先把这种商品的模具做好,然后开始生产产品,经过一个模具生产的产品,总有相同的特征。在这里,我们可以把模具看做类,而生产出来的产品看做对象。,3,封装,所谓数据封装就是指一组数据和与这组数据有关的操作集合组装在一起,形成一个能动的实体,封装是指把对象属性和操作结合在一起,构成独立的单元,它的内部信息对外界是隐蔽的,不允许外界直接存取对象的属性,只能通过有限的接口与对象发生联系。,在面向对象的程序设计中,封装是把数据和实现操作的代码放在对象内部,隐蔽一些内部细节。类是数据封装的工具,对象是封装的实现。外界要访问时需要通过类,类的访问控制机制体现在类的成员中可以有公有成员、私有成员和保护成员。其中共有成员和保护成员允许访问,私有成员是不允许访问的。对于外界而言,只需要知道对象所表现的外部行为,而不必了解内部实现细节。封装体现了面向对象方法的“信息隐蔽和局部化原则”。,4,继承,从已有的对象类型出发建立一种新的对象类型就是继承。继承在现实生活中是普遍存在的,比如说我们经常见到的汽车,它可以说是继承了机动车的一些特点,比如说都需要燃料,都需要引擎等等。同样它也有自己的一些特征,引入继承的一个原因是可以提高代码的重用率,更重要的是代码的扩充。,面向对象的程序设计中,继承指子类(派生类)可以自动拥有父类(基类)的全部属性和服务。父类和子类是一般与特殊的关系。在定义一个子类时,可以把父类所定义的内容做为自己的内容,并加入若干新的内容。继承是面向对象语言的重要特性,提高了软件的可重用性。,继承分为单重继承和多重继承。单重继承时,一个子类只有一个父类;它继承的是一个基类的特征。多重继承时,一个子类可以有多个父类,它所继承的特征可能不止来自于一个基类。单重继承构成的类之间的关系是树状结构,多重继承构成的类之间的关系是网状结构。,5,消息,首先来解释一下消息,消息是指对象之间在交互通讯中所传送的信息,也可以说是一个对象对另一个对象发出的请求。一般情况下,我们把发送消息的对象成为发送者或者请求者,接受消息的对象称为接受者或者,目标对象。当一个对象向另一个对象发送消息请求某项服务时,接收消息的对象响应该消息,进行所要求的服务,并把操作的结果返回给请求服务的对象。这样就完成了消息的传递。,在现实生活中对象都不会是孤立存在的,他们之间都存在着这种或者那种的联系。在面向对象程序中也需要一种机制对这种联系进行描述,这就是消息机制。,消息由三部分构成:消息名、接收消息的对象标识和参数。一般它具有以下几个性质:,1,一个对象可以接受不同的消息,进行不同的响应。,2,相同的消息被不同的对象接受,做出的响应也可以是不同的。,3,有些对象可以只接受对象,而不用响应,也就是说,对消息的响应并不是必须的。,消息也可以分为两类,公有的和私有的。当有一些消息传递给一个对象时,如果消息是其他对象直接传给它的,那么这些消息就是公有(,public,)消息;如果消息是这个对象传给它自己的,那么这些消息就称为私有,(private),消息。,6,多态性,多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。多态性也是面向对象系统的重要特征。在面向程序的设计中,多态性是指在基类中定义的属性和服务被子类继承后,可以具有不同的数据类型和表现出不同的行为。当一个对象接收到一个请求进行某项服务的消息时,将根据对象所属的类,动态地选用该类中定义的操作。不同的类对消息按不同的方式解释。,多态性机制不但为软件设计提供了灵活性,减少信息冗余,而且显著提高了软件的可复用性和可扩充性。,C+,中的多态可以分为四类:参数多态,包含多态,重载多态和强制多态。这些我们将会在后面的课程中一一进行介绍。,C+,支持两种多态性,分别是编译时的多态性和运行时的多态性。在此,编译时的多态性是通过重载实现的,运行时的多态性是通过虚函数实现的。这些内容将在第六章详细讲述。,1.2,面向对象程序设计的特点,1.2.1,传统程序设计方法的局限性,1.2.2,面向对象程序设计的主要优点,1.2.1,传统程序设计方法的局限性,存在下面几点局限性:,()传统程序设计开发软件的生产效率低下。,()传统程序设计难以应付日益庞大的信息量和多样的信息类型。,()传统的程序设计难以适应各种新环境。,实践证明,用传统方法开发出来的软件,维护时其费用和成本仍然很高,其原因是可修改性差,维护困难,导致可维护性差。,1.2.2,面向对象程序设计的主要优点,()符合人们习惯的思维方法,便于分解大型的复杂多变的问题。,()易于软件的维护和功能的增减。对象的封装性及对象之间的松散组合,都给软件的修改和维护带来了方便。,()可重用性好。,()与可视化技术相结合,改善了工作界面。,在结构化程序设计中可以用下面的式子表示程序:,程序,=,数据结构,+,算法,+,程序设计语言,+,语言环境,在面向对象程序设计中可以用下面的式子表示程序:,程序,=,对象,+,对象,+,对象,对象,=,算法,+,数据结构,+,程序设计语言,+,语言环境,1.3,面向对象的系统开发方法,可分为五个阶段:,()系统调查和需求分析阶段。,()分析问题的性质和求解问题阶段。,()整理问题阶段。,()程序实现阶段。,()软件测试阶段。,1.3.1,几种典型的面向对象程序设计语言,(),Simula,语言,(),Smalltalk,语言,(),C+,语言,(),Java,语言,(),C#,语言,1.3.2 C+,面向对象程序设计流程,建立一个项目的基本步骤是:,(,1,)利用编辑器建立程序代码文件,包括头文件、代码文件、资源文件等。,(,2,)启动编译程序,编译程序首先调用预处理程序处理程序中的预处理命令(如,#include,,,#define,等),经过预处理程序处理的代码将作为编译程序的输入。,(,3,)编译对用户程序进行词法和语法分析,建立目标文件,文件中包括机器代码、连接指令、外部引用以及从该源文件中产生的函数和数据名。,(,4,)连接程序将所有的目标代码和用到的静态连接库的代码连接起来,为所有的外部变量和函数找到其提供地点,,(,5,)最后生成一个可执行文件。一般有一个,makefile,文件来协调各个部分产生可执行文件。,1.4,程序举例,【,实例,1】,使用面向对象的设计方法,编写一个满足如下要求的程序:,()根据输入的日期输出这一日期的前一天和后一天的日期。,()根据输出的日期判断是星期几。,#include,using namespace std;,struct Date,int month;,int day;,int year;,;,class TdateType,public:,TdateType();/,不带参数的构造函数定义,TdateType(Date b);/,有参数的构造函数定义,void Next();/,明天的日期成员函数定义,void Previons();/,昨天的日期成员函数定义,int Weekday();/,判断是星期几成员函数定义,void Print();/,打印日期,private:,Date a;/,日期结构数据成员,int IsLeapYear();/,私有成员函数,判断是否闰年,int MonthEnd(int m);/,计算某月的天数,;,/,以下为类的成员函数实现部分,TdateType:TdateType(),a.year=1999;,a.month=1;,a.day=1;,TdateType:TdateType(Date b),a.month=b.month;,a.day=b.day;,a.year=b.year;,void TdateType:Next(),a.day+;,if(a.day MonthEnd(a.month),a.day=1;,a.month+;,if(a.month 12),a.month =1;,a.year+;,void TdateType:Previons(),a.day-;,if(a.day 1),a.month-;,if(a.month 1),a.month=12;,a.year-;,a.day=MonthEnd(a.month);,int TdateType:IsLeapYear(),return(a.year%4=0,int TdateType:MonthEnd(int m),switch(m),case 1:,case 3:,case 5:,case 7:,case 8:,case 10:,case 12:return 31;,case 4:,case 6:,case 9:,case 11:return 30;,case 2:,if(IsLeapYear(),return 29;,else,return 28;,return 0;,int TdateType:Weekday(),long n;,n=(a.year)-1)*365;/,直至去年的天数,(,不考虑闰年,),n+=(a.year)-1)/4;/,以下,3,条语句考虑闰年数,n-=(a.year)-1)/100;,n+=(a.year)-1)/400;,for(int i=1;ia.month;i+)/,本年直至上月的天数,n+=MonthEnd(i);,n+=a.day;/,本月的天数,n%=7;/,折算成星期几,若,j,是,0,则为星期日,return n;,void TdateType:Print(),cout a.year,年,a.month,月,a.day,日,;,switch(Weekday(),case 0:cout,星期日,n;break;,case 1:cout,星期一,n;break;,case 2:cout,星期二,n;break;,case 3:cout,星期三,n;break;,case 4:cout,星期四,n;break;,case 5:cout,星期五,n;break;,case 6:cout,星期六,n;break;,int main(),Date date;,cout,请输入日期(格式为:年月日,中间用空格隔开),:date.yeardate.monthdate.day;,TdateType Getdata(date);/,根据输入的日期来创建并初始化对象,Getdata.Weekday();,Getdata.Print();,cout,昨天是:,endl;,Getdata.Previons();,Getdata.Weekday();,Getdata.Print();,cout,明天是:,endl;,Getdata.Next();,Getdata.Weekday();,Getdata.Print();,return 0;,C+,程序中,数据成员也叫字段,数据成员也叫方法。如果使用的是,Microsoft Visual Studio 2005,或以上的开发环境,可以从类图中看到类与数据成员的相互关系,如图,1-2,所示。,图,1-2,程序的类图表示,1.5,本章小结,本章介绍了面向对象程序设计的概念,面向对象程序设计(,oop,),指一种程序设计范型,同时也是一种程序开发的方法论。,它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。这种范型的主要特征是:程序,=,对象,+,消息。,面向对象程序的基本元素是对象,.,面向对象程序的主要结构特点是:,第一,程序一般由类的定义和类的使用两部分组成,在程序中定义各对象并规定它们之间传递消息的规律。,第二,程序中的一切操作都是通过向对象发送消息来实现的,对象接收到消息后,启动有关方法来完成相应得操作。,对象、对象的状态和行为、类、类的结构、消息和方法是面向对象程序设计中出现的几个基本概念。,面向对象程序设计的四大特征是:抽象性、封装性、继承性和多态性。,传统的程序设计方法存在下面几点局限性。,面向对象程序设计的优点。,习题一,一、填空题,1,面向对象程序设计,指一种,_,,同时也是一种程序开发的方法论。它将,_,作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、,_,和扩展性。,2,对象之间进行通信的结构叫做,_,。,3,面向对象程序设计的四大特征是:,_,、,_,、,_,和,_,。,4,面向对象的程序设计中最为强大的功能是,_,,它允许用户在一个已经存在的类之上编写新的程序。,5,Smalltalk,是第一个真正的面向对象程序设计语言,它体现了纯粹的,OOP,设计思想,是最纯的,OOP,语言,它起源于,_,语言。,JAVA,语言是一种适用于分布式计算的新型面向对象程序设计语言,可以看作是,_,语言的派生。,二、选择题,1,面向对象程序的基本元素是()。,A,对象,B,方法,C,类,D,程序,2,()是面向对象系统中实现对象间的通信和请求任务的操作,是要求某个对象执行其中某个功能操作的规格说明。,A,语言,B,类,C,方法,D,消息,3,Java,语言中的(),主要是通过对象和类来实现的,即把相关的数据及其操作封装在类里,构成具有独立意义的构件。,A,抽象,B,继承,C,封装,D,多态,4,在软件开发中,类的()使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。,A,抽象性,B,继承性,C,封装性,D,多态性,5,()语言的来源是,Algol60,的面向对象的扩展,但它是作为模拟语言设计的。它具有面向对象语言的功能和某些面向对象的方法学。,A,C+B,Simula,Smalltalk D,Java,三、简答题,1,什么是面向对象程序设计?,2,简述面向对象程序设计的基本概念和特征。,3,传统的程序设计具有哪些局限性?,4,面向对象程序设计的优点是什么?,5,试说出几种典型的面向对象程序设计语言,并对其进行简单的说明。,C+,面向对象程序设计,第二章,本章导读,C+,语言是在,C,语言的基础上发展而来的,它比,C,语言更容易被人们学习和掌握。,C+,语言对,C,语言的扩充,主要是引进了面向对象机制,包括类、对象、派生类、继承、多态等概念和新的语言机制,从而使,C+,成为一种面向对象的程序设计语言。,应该说明的是,C+,语言并没有完全抛弃,C,语言的成份,,C+,的面向对象和面向过程的双重特性是区别于其它面向对象语言的一个显著标志。,本章要点,C+,的特点,C+,程序的基本结构,C+,和,C,语言的区别,第,2,章 目录,2.1 C+,语言的产生和发展,2.2 C+,程序的结构及编程环境,2.3 C+,的数据类型,2.4,运算符、表达式和基本语句,2.5,函数,2.6,作用域和引用,2.7,程序举例,2.8,本章小结,习题二,2.1 C+,语言的产生和发展,2.1.1 C+,的产生,2.1.2 C+,的特点,2.1.1 C+,的产生,C+,程序设计语言由,C,语言发展而来。,C,语言产生以后,最早在,UNIX,操作系统上使用,并且迅速被人们接受并得到了广泛的应用。到了,80,年代,C,语言已经风靡全球,成为一种应用最为广泛的程序设计语言。,但,C,语言在盛行的时候也显现出了自己的局限性,突出表现在以下几个方面:,(),C,语言类型检查机制较弱,这使得程序中的一些错误不能在编译时被发现。,(),C,语言本身几乎没有支持代码的重用机制,这使得各个程序的代码很难为其他程序所用。,(),C,语言不适合开发大型的程序,当程序达到一定的规模时,程序员很难控制程序的复杂性。,为了避免,C,语言以上的这些不足之处,,1980,年贝尔实验室的,Bjarne Stroustrup,博士开始对,C,语言进行改编。,虚函数(,virtual function,)、运算符重载(,operator overloading,)、多重继承(,multiple inheritance,)、模板(,template,)、异常(,exception,)、,RTTI,、名字空间(,name space,)逐渐被加入标准,,1983,年正式命名新的语言为,C+,语言。,1998,年国际标准组织(,ISO,)颁布了,C+,程序设计语言的国际标准,ISO/IEC 14882-1998,。,C+,是具有国际标准的编程语言,通常称作,ANSI/ISO C+,。,C+,继承了,C,的原有精髓,增加了对开发大型软件非常有效的面向对象机制,并且弥补了,C,语言不支持代码重用的不足,成为一种既可表现过程模型,又可表现对象模型的优秀的程序设计语言之一。目前,C+,仍在不断的发展当中。,2.1.2 C+,的特点,()兼容,C,语言。这主要表现在大部分,C,程序不需修改即可在,C+,的编译环境下运行,用,C,语言编写的许多库函数和应用软件都可用于,C+,。,()用,C+,编写的程序可读性更好,代码结构更合理,可直接地在程序中映射问题空间的结构。,()生成的代码质量高,运行效率仅比汇编语言代码段慢,10%20%,。,()从开发时间、费用到形成的软件的可重用性、可扩充性、可维护性和可靠性等方面有了很大的提高,使得大中型的程序开发项目变得容易得多。,(),C+,是面向对象的程序设计语言,可方便地构造出模拟现实问题的实体和操作。,2.2 C+,程序的结构及编程环境,2.2.1 C+,程序基本格式,2.2.2 C+,程序的结构,2.2.3 C+,程序的编程环境,2.2.1 C+,程序基本格式,让我们通过程序,2.1,的学习,对,C+,程序的格式有一个初步的认识。,【,例,2.1】,#include,using namespace std;,int max(int x,int y);,void main()/,主函数,int a,b,fmax;/,定义三个整型变量,coutab;/,从键盘输入变量,a,和,b,的值,fmax=max(a,b);/,调用函数,max,将得到的值赋给变量,fmax,coutThe larger number:fmaxy),return x;,else,return y;,由上面程序可以看出,C+,程序有以下几个基本组成部分:,1,预处理命令,2,输入和输出,3,函数,4,注释,2.2.2 C+,程序的结构,一个面向对象的,C+,程序一般由类的声明和类的使用两大部分组成。,类的使用部分一般由主函数及有关子函数组成。,其结构大致如下:,#include,/,类的声明部分,class A,int x,y,z;/,类,A,的数据成员的声名,fun()/,类,A,的成员函数的定义和声明,;,/,类的使用部分,int main(),A a;/,创建一个类,A,的对象,a,fun();/,调用成员函数,fun(),return 0;,在应用程序中,我们常常把类的成员函数的定义与声明分开。,分开后的定义和声明还可以写在两个文件中,使用时只要用,#include,包含即可,所以我们说,C+,程序是多文件结构。,2.2.3 C+,程序的编程环境,在,DOS,下,,C+,程序的编辑、编译和运行方法和过程与,C,语言基本一样,特别是常用的,C+,版本,如,Turbo C+,或,Borland C+,都带有,C,和,C+,两种编译器。,在,Windows,下,我们常用,Visual C+,开发环境,来编辑、编译和运行,C+,程序,随着,.NET,的出现,有时也用,Microsoft Visual Studio 2005,或,Microsoft Visual Studio 2008,来编辑、编译和运行,C+,程序。,2.3 C+,的数据类型,2.3.1,关键字和标识符,2.3.2 C+,的基本数据类型,2.3.3,常量,2.3.4,变量,2.3.5,数组,2.3.6,结构体,2.3.7,联合体,2.3.8,枚举类型,2.3.9,用,typedef,类型,2.3.10,数据类型转换,基本数据类型(是系统预先定义的,并被,内设在语言中的数据类型),派生类型(派生类型是从基本类型派生出,来的新类型,它是一种更高级的抽象),类类型(类类型是通过组合现存类型而生,成的新类型),2.3.1,关键字和标识符,在,C+,语言中,关键字(,keyword,)又称为保留字,它是系统预先定义的、具有特定含义的标识符,因此不允许用户重新定义,即不能作为新的标识符出现在程序中,例如:例,2.1,中的“,cin”,、“,cout”,和“,return”,等等。,标识符是由若干个字符组成的字符序列,用来命名程序中的一些实体。通常用于常量名、变量名、函数名、类名、结构名、联合名、对象名、类型名和标号名等。,在程序中用户是通过标识符来定义和引用这些对象的。,C+,语言中构成标识符的语法规则如下:,(,1,)标识符由字母(,a,z,,,A,Z,)、数字(,0,9,)或下划线(,_,)组成;,(,2,)第一个字符必须是字母或下划线。例如,,Example,,,My_Birthday,,,Message,,是合法的标识符;,5key,,,5-A,是非法的标识符;,(,3,),VC+,中标识符最多由,247,个字符组成;,(,4,),C+,大小写字母被认为是两个不同的标识符。例如,,book,和,Book,被认为是两个不同的标识符;,(,5,)关键字不能作为新的标识符在程序中使用,但标识符中可以包含关键字。例如,,intx,,,myclass,是合法的标识符。,下面列出了,C+,语言中的标点符号:,逗号,用做数据之间的分隔符;,;,分号,语句结束符;,:,冒号,语句标号结束符或条件运算符,单引号,字符常量标记符,双引号,字符串常量标记符,左花括号,复合语句开始标记符,右花括号,复合语句结束标记符,2.3.2 C+,的基本数据类型,整数类型(,int,),/,用于定义整数对象。,字符类型(,char,),/,字符类型用于定义字符数据。,浮点类型(,float,,,double,),/,浮点类型用于定义实数。,空类型(,void,),/void,类型主要用于声明没有返回值的函数,以及声明未确定类型或指向任意数据类型的指针。,数据类型决定了数据所占存储空间的大小及值域范围,这些是与机器有关的。,表,2-1,(见课本,p14,)列出的是在,32,位编译器中的基本数据类型所占空间的大小和值域范围。,2.3.3,常量,特点,分类,常量特点,常量是指在程序运行的整个过程中始终保持不变的量。,在表达式中常量是明确表示出的值。,常量不同于变量,主要表现在以下两个方面:,第一,常量不在内存中占有编译空间;,第二,常量的值不能修改。,常量分类,整型常量,字符常量,逻辑常量,枚举常量,实型常量,地址常量,字符串常量,(,一,),整型常量,整型常量简称整数,它有十进制、八进制和十六进制三种表示。,在整数末尾使用,u,和,l,字母,1,十进制整数,当一个十进制整数大于等于,-2147483648,即,-2,31,-1,,同时小于等于,2147483647,即,2,31,-1,时,则被系统看作是,int,型常量;当在,2147483648,4294967295,即,232-1,范围之内时,则被看作是,unsigned int,型常量;当超过上述两个范围时,则无法用,C+,整数类型表示,只有把它用实数(即带小数点的数)表示才能够被有效地存储和处理。,2,八进制整数,当一个八进制整数大于等于,0,同时小于等于,017777777777,时,则称为,int,型常量,当大于等于,020000000000,同时小于等于,037777777777,时,则称为,unsigned int,型常量,超过上述两个范围的八进制整数则不要使用,因为没有相对应的,C+,整数类型。,3,十六进制整数,当一个十六进制整数大于等于,0,同时小于等于,0 x7FFFFFFF,时,则称为,int,型常量,当大于等于,0 x80000000,同时小于等于,0 xFFFFFFFF,时,则称为,unsigned int,型常量,超过上述两个范围的十六进制整数没有相对应的,C+,整数类型,所以不能使用它们。,4,在整数末尾使用,u,和,l,字母,对于任一种进制的整数,若后缀有字母,u,(大、小写等效),则硬性规定它为一个无符号整型,(unsigned int),数,若后缀有字母,l,(大、小写等效),则硬性规定它为一个长整型,(long int),数。,在一个整数的末尾,可以同时使用,u,和,l,,并且对排列无要求。如,25U,,,0327UL,,,0 x3ffbL,,,648LU,等都是整数,其类型依次为,unsigned int,,,unsigned long int,,,long int,和,unsigned long int,。,(,二,),字符常量,字符常量简称字符,它以单引号作为起止标记,中间为一个或若干个字符。,如,a,,,%,,,n,,,012,,,125,,,x4F,等都是合乎规定的字符常量。,每个字符常量只表示一个字符,当字符常量的一对单引号内多于一个字符时,则将按规定解释为一个字符。,如,a,表示字符,a,,,125,解释为字符,U,。,每个,ASCII,字符均是一个字符型数据,即字符型中的一个值。,“转义”字符的概念,其含义是:以反斜线作引导的下一个字符失去了原来的含义,而转义为具有某种控制功能的字符。如,n,中的字符,n,通过前面使用的反斜线转义后就成为一个换行符,其,ASCII,码为,10,。,(,三,),逻辑常量,逻辑常量是逻辑类型中的值,,VC+,用保留字,bool,表示逻辑类型,该类型只含有两个值,即整数,0,和,1,,用,0,表示逻辑假,用,1,表示逻辑真。,在,VC+,中还定义了这两个逻辑值所对应的符号常量,false,和,true,,,false,的值为,0,,表示逻辑假,,true,的值为,1,,表示逻辑真。,(,四,),枚举常量,枚举常量是枚举类型中的值,即枚举值。,枚举类型是一种用户定义的类型,只有用户在程序中定义它后才能被使用。,用户通常利用枚举类型定义程序中需要使用的一组相关的符号常量。,枚举类型的定义格式为:,enum ;,它是一条枚举类型定义语句,该语句以,enum,保留字开始,接着为枚举类型名,它是用户命名的一个标识符,以后就直接使用它表示该类型,枚举类型名后为该类型的定义体,它是由一对花括号和其中的枚举表所组成,枚举表为一组用逗号分开的由用户命名的符号常量,每个符号常量又称为枚举常量或枚举值。如:,(),enum colorred,yellow,blue;,(),enum daySun,Mon,Tues,Wed,Thur,Fri,Sat;,第一条语句定义了一个枚举类型,color,,用来表示颜色,它包含三个枚举值,red,,,yellow,和,blue,,分别代表红色、黄色和兰色。,第二条语句定义了一个枚举类型,day,,用来表示日期,它包含,7,个枚举值,分别表示星期日、星期一至星期六。,一种枚举类型被定义后,可以象整型等预定义类型一样使用在允许出现数据类型的任何地方。如可以利用它定义变量。,(),enum color c1,c2,c3;,(),enum day today,workday;,(),c1=red;,(),workday=Wed;,(,五,),实型常量,简称实数,有十进制的定点和浮点两种表示方法。,1,定点表示,定点表示的实数简称定点数,它是由一个符号(正号可以省略)后接若干个十进制数字和一个小数点所组成,这个小数点可以处在任何一个数字位之前或之后。如,.12,1.2,12.,0.12,-12.40,+3.14,-.02037,-36.0,等都是符合书写规定的定点数。,2,浮点表示,浮点表示的实数简称浮点数,它是由一个十进制整数或定点数后接一个字母,e,(大、小均可)和一个,1,至,3,位的十进制整数所组成,字母,e,之前的部分称为该浮点数的尾数,之后的部分成为该浮点数的指数,该浮点数的值就是它的尾数乘以,10,的指数幂。,如,3.23E5,+3.25e-8,2E4,0.376E-15,1e-6,-6.04E+12,.43E0,96.e24,等都是合乎规定的浮点数,它们对应的数值分别为:,3.25*105,3.25*10-8,20000,0.376*10-15,10-6,-6.04*1012,0.43,96*1024,等。,(,六,),地址常量,指针类型的值域是,0,2,32,-1,之间的所有整数,每一个整数代表内存空间中一个对应单元(若存在的话)的存储地址,每一个整数地址都不允许用户直接使用来访问内存,以防止用户对内存系统数据的有意或无意的破坏。,但用户可以直接使用整数,0,作为地址常量,它是,C+,中唯一允许使用的地址常量,并称为空地址常量,它对应的符号常量为,NULL,,表示不代表任何地址,在,iostream,等头文件中有此常量的定义。,(七)字符串常量,字符串常量简称字符串,是由一对双引号括起来的零个或多个字符序列。,例如:,“,This is a C+Program.n”/,字符串常量,“,td”/,字符串常量,“,20021222”/,字符串常量,字符串中可以包含空格符、转义字符或其他字符。,字符串常量不同于字符常量,两者是有区别的,主要表现在以下几个方面:,(,1,)字符常量的标识符是单引号,字符串常量的标识符是双引号;,(,2,)存储方式不同;例如:,Program/,字符串常量,m/,字符串常量,m/,字符常量,(,3,)字符串常量和字符常量所能进行的运算是不同的。,例如:,m+n,和,m+n,运算的结果是不同的。,2.3.4,变量,(,一,),变量定义语句,(,二,),语句格式举例,(,三,),语句执行过程,(,四,),语句应用举例,(,五,),符号常量定义语句,(,六,),使用,#define,命令定义符号常量,(,七,),使用变量和常量的程序举例,(,一,),变量定义语句,变量定义是通过变量定义语句实现的,该语句的一般格式为:,=,;,为已存在的一种数据类型,如,short,int,long,char,bool,float,dou
展开阅读全文