面向对象程序设计(谭浩强版)ppt课件.ppt

上传人:牧羊曲112 文档编号:1371585 上传时间:2022-11-15 格式:PPT 页数:499 大小:4.26MB
返回 下载 相关 举报
面向对象程序设计(谭浩强版)ppt课件.ppt_第1页
第1页 / 共499页
面向对象程序设计(谭浩强版)ppt课件.ppt_第2页
第2页 / 共499页
面向对象程序设计(谭浩强版)ppt课件.ppt_第3页
第3页 / 共499页
面向对象程序设计(谭浩强版)ppt课件.ppt_第4页
第4页 / 共499页
面向对象程序设计(谭浩强版)ppt课件.ppt_第5页
第5页 / 共499页
点击查看更多>>
资源描述

《面向对象程序设计(谭浩强版)ppt课件.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计(谭浩强版)ppt课件.ppt(499页珍藏版)》请在三一办公上搜索。

1、面向对象程序设计,面向对象程序设计,第1章C+的初步知识第2章类和对象第3章关于类和对象的进一步讨论第4章运算符重载第5章继承与派生第6章多态性与虚函数第7章输入输出流第8章工具,内容简介,面向对象的基本思想,C+语言的基本概念、基本语法和编程方法,C+语言的面向对象特征,类与对象,继承与派生,多态性与虚函数,学习方法,多练习,掌握基本概念,多读程序,学习编程方法与技巧,多上机实践,加强动手能力,多剖析范例,积累编程经验,教材及参考书目,C+语言基础教程吕凤翥著清华大学出版社1999,C+语言及其程序设计教程(修订版)张国峰编著电子工业出版社1997,C+语言程序设计郑莉等编著清华大学出版社1

2、999,Visual C+程序设计王育坚编著清华大学出版社,第1章C+初步知识,1.1从到1.2最简单的程序1.3C+对的扩充1.4程序的编写和实现1.5关于上要实践1.6C+程序的结构,1.1从到,机器语言(二进制码),汇编语言,20世纪50年代中期,FORTRAN语言,20世纪50年代中期,Algol语言,在计算机语言发展史上具有划时代的意义,引入了许多程序设计概念。如变量、数组、循环、分支等。,提出块(BeginEnd)思想,对数据进行保护,是一种初级封装。,20世纪60年代中期,Simula 67语言,面向对象语言的鼻祖,提出了对象、类的概念,并支持类的继承。,20世纪70年代中期,A

3、da语言,支持数据抽象类型的最重要的语言之一,但不完全支持继承。,20世纪70年代中期,Smalltalk语言,最有影响的面向对象语言之一,丰富了面向对象的概念。,20世纪80年代中期后出现C+等多种面向对象语言,1.1从到,C语言的主要特点是:1、C语言是一种结构化的程序设计语言,语言本身简洁、使用灵活方便。既适用于设计和编写大的系统程序,又适用于编写小的控制程序,也适用科学计算。,2、它既有高级语言的特点,又具有汇编语言的特点。运算符丰富,除了提供对数据的算术逻辑运算外,还提供了二进制的位运算。并且也提供了灵活的数据结构。用C语言编写的程序表述灵活方便,功能强大。用C语言开发的程序,其结构

4、性好,目标程序质量高,程序执行效率高。,3、程序的可移植性好。用C语言在某一种型号的计算机上开发的程序,基本上可以不作修改,而直接移植到其它型号和不同档次的计算机上运行。,4、程序的语法结构不够严密,程序设计的自由度大。这对于比较精通C语言的程序设计者来说,可以设计出高质量的非常通用的程序。但对于初学者来说,要能比较熟练运用C语言来编写程序,并不是一件容易的事情。与其它高级语言相比而言,调试程序比较困难。往往是编好程序输入计算机后,编译时容易通过,而在执行时还会出错。但只要对C语言的语法规则真正领会,编写程序及调试程序还是比较容易掌握的。,随着C语言应用的推广,C语言存在的一些缺陷或不足也开始

5、流露出来,并受到大家的关注。如:C语言对数据类型检查的机制比较弱;缺少支持代码重用的结构;随着软件工程规模的扩大,难以适应开发特大型的程度等等。,为了克服C语言本身存在的缺点,并保持C语言简洁、高效,与汇编语言接近的特点,1980年,贝尔实验室的Bjarne Stroustrup博士及其同事对C语言进行了改进和扩充,并把Simula 67中类的概念引入到C中。并在1983年由Rick Maseitti提议正式命名为C+(C Plus Plus)。后来,又把运算符的重载、引用、虚函数等功能加入到C+中,使C+的功能日趋完善。当前用得较为广泛的C+有:VC+ (Visual C Plus Plus

6、)、 BC+(Borland C Plus Plus)、AT&T C+等。,一、C+的起源,在C语言基础上为支持面向对象的程序设计研制的一个通用目的的程序设计语言;,由AT&T贝尔实验室Bjarne Stroustrup博士开发;,二、C+的特点,与C兼容,既保持了C的简洁、高效和接近汇编的特点,又比C更安全,结构化程度更高;,既支持面向过程的程序设计,又支持面向对象的程序设计;,注意其两面性,1.1从到,必须先研究事物,而后才能研究过程。必须先知道一个事物是什么,而后才能觉察这个事物中所发生的变化。路德维希费尔巴哈和德国古典文学的终结恩格斯,三、面向对象的方法,1.1从到,1.2最简单的C+

7、程序,例1.1:输出一行字符:“his is a C+ program.”#include /用cout输出时需要用此头文件using namespace std;/使用命名空间std(276) int main()coutThis is a C+ Program.n;/用cout的方法输出一行return 0;,1.2最简单的C+程序,分析:(1)main前的int ;return 0;表示正常返回(2)/*/ 多行注释,不能嵌套定义(3)cout(c、out),输出对流类的一个对象(4)头文件,i-o-stream,输入输出流类(5)using namespace std ;命名空间std

8、,表示要用到命名空间std的内容。(273页),1.2最简单的C+程序,cout:输出(1)coutab;(2)couta,b,c;(3)续行符“”(4)cout“hellon”;/原样输出字符串(5)cout“a=”aendl;,错,换行,1.2最简单的C+程序,例1.2:求a和b两个数之和。#include /用cout输出时需要用此头文件using namespace std;/使用命名空间std int main() /函数体开始int a,b,sum; /定义变量 cinab; /输入语句sum=a+b;/赋值语句couta+b=sumendl;/输出语句return 0; /如程序

9、正常结束,向操作系统返回一个零值参考页,1.2最简单的C+程序,#include using namespace std; int main() int max(int x,int y);int a,b,c;cinab;c=max(a,b);/函数调用coutmax=cendl;return 0;,例1.3:输入两个数x和y,求两数中的大者。,int max(int x,int y)int z;if(xy) z=x;elsez=y;return(z);,函数声明,1.2最简单的C+程序,例1.4:输入任意短语或句子,计算该短语包含多少个字(word)和字符(character)。注意:输入短语

10、时,必须在字和字之间只空一格。,面向过程的方法,#include #include void main() char ch; int wdcount,chcount; wdcount=1; chcount=0; printf(*:Please input any phrasen); while(ch=getche()!=r) chcount+;,1.2最简单的C+程序,if(ch= ) wdcount+; printf(n*:The number of word is %dn,wdcount); printf(n*:The number of char is %dn,chcount);,面向对

11、象的方法,#include #include class countpublic:,1.2最简单的C+程序(续),count(); void process(); void display();private: int wdcount,chcount;count:count() wdcount=1; chcount=0;void count:process(),1.2最简单的C+程序,char ch; cout*:Please input any phraseendl; while(ch=getche()!=r) chcount+; if(ch= ) wdcount+; coutendl;vo

12、id count:display() printf(n*:The number of word is %dn,wdcount);,1.2最简单的C+程序(续),printf(n*:The number of char is %dn,chcount);void main() count A; A.process(); A.display();,运行结果,*Please input any phrase.I am a teacher*:The number of word is 4*:The number of char is 15,1.2最简单的C+程序(续),一、面向过程与面向对象程序设计,是

13、一种数学思维或计算机思维方法,与人们认识世界的方法不同以不稳定的、多变的“过程”和“操作” 为中心来构造系统可重用性较差,是建立在认识方法学基础上的一项技术科学,比较自然地模拟了人类认识客观世界的方式;以相对稳定的“对象”和“数据结构”为中心来构造系统可重用性较好,面向过程程序设计,面向对象程序设计,一、面向过程与面向对象程序设计,面向过程程序设计,面向对象程序设计,P1,P2,P3,P4,P5,O1,O2,O3,O4,O5,Changing?,P6,一、面向过程与面向对象程序设计,面向过程程序设计,面向对象程序设计,P1,P2,P3,P5,O1,O2,O3,O4,O5,Changing?,P

14、6,O4,二、抽象在面向对象中的作用,、抽象的概念,抽象代表着一个对象的本质特征,这个特征将这个对象与所有其他种类的对象区别开来;,抽象是通过从特定的实例中抽取共同的性质以形成一般化的概念的过程;,抽象具有层次;,飞机,二、抽象在面向对象中的作用(续),、面向对象抽象的原理(面向对象计算的本质),数据抽象、行为共享、进化、确定性,1、数据抽象,为程序员提供了一种对数据和为操作这些数据所需要的算法的抽象;是面向对象方法的核心,包括:,模块化:构成了面向对象计算的本质;,信息隐藏:将一个模块的细节部分对用户隐藏起来,用户只能通过一个受保护的接口来访问某个模块,而不能直接访问一个模块内部的细节;,类

15、,公有成员,二、抽象在面向对象中的作用(续),2、行为共享,行为是由实体的外部接口定义的,行为共享指许多实体具有相同的接口,可增加系统的灵活性;,支持行为共享的方式,分类与层次分类,多态与继承,对象,公有成员函数名,二、抽象在面向对象中的作用(续),3、进化,需求进化(虚函数),进化式的问题求解(继承的构造函数),4、确定性,确保每个行为项都有一个正确的解释,系统不会因不能响应某一行为而失败;,确定性与类型的正确性有关;,三、面向对象计算的基本特征,面向对象系统的三要素:对象、类和继承;,(一)、对象,1、概念上,对象是代表着正在创建的系统中的一个实体;,2、实现形式上,对象是一个状态和操作(

16、或方法)的封装体;,3、对象的定义,状态:对象的状态由这个对象的属性和这些属性的当前值决定。属性是静态的,当前值是动态的;,一个对象具有状态、行为和标识。,三、面向对象计算的基本特征(续),行为:一个对象如何以状态变化和消息传递的形式进行作用和对外界进行反应。,一个对象的行为代表了这个对象的外部可见的和可测试的活动;,一个对象的状态代表着它的行为的累积结果;,标识:标识是一个对象固有的一种特性,该特性将这个对象与其他对象区别开来;,对象1,三、面向对象计算的基本特征(续),4、对象的分类,实体对象,界面对象,控制对象,按作用分类,存储信息的对象,支持系统的主要功能,5、对象的确认,发明对象:主

17、要是控制对象;,发现对象:主要是实体对象或界面对象;,(二)、类,1、什么是类,三、面向对象计算的基本特征(续),类是创建对象的样板,它包含着所创建对象的状态描述和方法的定义。类的完整描述包含了外部接口和内部算法以及数据结构的形式;,2、类是对象的抽象及描述,类中包含生成对象的具体方法,由一个类所创建的对象称为该类的实例;,3、类是抽象数据类型的实现,类是所有对象的共同的行为和不同的状态的集合体;,(三)、继承,继承提供了创建新类的一种方法,它的本质特征是行为共享;,三、面向对象计算的基本特征(续),四、C+语言中的抽象支持,控制抽象:用于排列任意动作的顺序的一种方法;,三种语句控制结构:顺序

18、、循环、分支,过程抽象(面向过程):对一组输入数据的一个计算动作和产生的输出结果;,数据抽象(面向对象):类是实现抽象数据类型的工具;,五、C+对面向对象程序设计方法的支持,C+支持数据封装(数据抽象),C+中,类是支持数据封装的工具,对象则是数据封装的实现;,C+中包含有私有、公有和保护成员,每个可能的消息对应一个相应的方法,方法通过函数来定义;,C+中通过发送消息来处理对象,C+中允许友元破坏封装性,C+中允许函数名和运算符重载,C+支持继承性,C+支持动态联编,六、C+对C语言的改进,增加了新的运算符::,new,delete等;,改进了类型系统,增加了安全性;,引进了引用概念;,允许函

19、数重载,允许设置缺省参数,提高了编程的灵活性;,引进了内联函数,提高了程序的效率;,可以根据需要随时对变量进行说明;,七、C+程序的编辑、编译和运行,(一)、编辑:源文件的扩展名为.cpp,(二)、编译,1、预处理过程,词法分析:单词,语法分析:构造程序的格式,符号表:程序中的各种符号及其属性,错误处理程序:,生成目标代码:目标文件扩展名.obj,2、编译 过程,3、连接过程:可执行文件扩展名.exe,三、运行,八、C+程序的编辑、编译和运行(续),编译过程:1)启动Visual C+,选择“文件”菜单中的“新建”命令,选择“文件”标签中的“C+ Source File”选项。2)选择源程序存

20、放的目录和输入源程序名,单击“确定”。3)在编辑器中编写源程序。4)单击F7或“编译”中的“重建全部”编译源程序,若编译通过,单击“执行”,在DOS屏上看结果,任按一键返回编辑器。,启动VC+编译系统,VC+编译系统界面,单击“File”菜单中“New”命令,选择“Files”选项卡,选择C+源文件命令,输入文件名,输入文件存放位置,单击选择驱动器,选择驱动器或目录,C+源文件编辑界面,输入C+源代码,可以将此源代码另起文件名存盘,选择编译命令,将源文件.cpp生成.obj文件,如果编译出错,会出现提示信息,指出错误的位置及种类,错误所在行,错误的原因,双击错误所在行,光标移到该行,生成可执行

21、文件,通过后单击该命令运行程序,运行结果显示在DOS屏上,注意:不可以在软盘上运行程序!应该把保存在软盘中的源文件拷贝到硬盘的目录中再运行!,源程序所在目录,未编译前,只有一个源程序,编译运行后,出现众多附加文件,同时,产生一个子目录Debug,Debug目录中,有obj和EXE文件,补: C+的字符集,大小写的英文字母:az,AZ,数字字符:09,特殊字符,词法记号,1、关键字(保留字),词法记号(续),2、标识符,组成规则:以字母或下划线开始,其后跟零个或多个字母、数字或下划线;,不能以数字开始,正确标识符:Result, DoubleList,_first, first_错误标识符:1f

22、irst,标识符的长度任意(受编译器限制);,区分字母的大小写;,不能使用系统的保留字;,例如:ADD, Add, add,词法记号(续),3、运算符,单目,双目,三目,运算符,5、分隔符,(),分隔符,:,4、各种文字,数字,字符文字,串文字,文字,布尔文字,;,空白,一、空白,包括:空格、制表符、换行符、注释,功能:指示词法记号的开始和结束位置;,二、注释,/*/,/,C+程序的结构,一、C+示范程序,#include void main() coutHello world! endl;,二、C+程序的组成,预处理命令,输入输出,函数,语句,变量,其他,I/O流库,提供所有的输入输出操作,

23、cout:流类对象:提取符例如:cinPlease inputtwo integers:;cinab;endl:换行;,1.3.1 C+的输入输出1、用cout进行输出举例:如果要输出a=2,b=3,c=4(假如已赋值)coutabc;cina;cinb;cinc;,1.3C+对C的补充,基本数据类型,一、基本数据类型,整型int,浮点型(实型),字符型char,基本数据类型,逻辑型bool,空值型void,单精度浮点数float,双精度浮点数double,用于函数和指针,基本数据类型(续),二、数据类型修饰符,signed:有符号,unsigned:无符号,short:短型,long:长型,

24、说明:,3) long修饰符还适用于双精度浮点数;,2) 上述修饰符均可用于整型和字符型;,1) 类型修饰符可以修饰除void、bool类型以外的其他类型;,基本数据类型(续),三、基本数据类型列表,基本数据类型(续),说明:,1) 表中的int可以省略,即在int之前有修饰符出现时,可以省略关键字int;,2) 单精度类型float、双精度类型double、长精度类型long double统称浮点类型;,3) char类型和各种int类型统称整型类型;char类型变量在内存中以它的ASCII码值的形式存储;,4) 字宽(字节)取决于操作系统和编译器的实现,可用sizeof验证;,常量,一、整

25、型常量(无小数部分),1、表示方法,十进制,八进制,十六进制,2、十进制表示,由09的数字组成,不能以0开始,无前缀,例:132, -345,3、八进制表示,由0 7的数字组成,以0为前缀,例:010, -0536,4、十六进制表示,由09的数字及A F的字母(大小写均可)组成,以0 x或0X为前缀,例:0 x7A, -0X3de,常量(续),5、说明:,1) 长整型用L(或l)做后缀表示。例如:32765L,793l;,2) 无符号型用U(或u)做后缀表示。例如:4352U,3100u;,3) unsigned long型用后缀U(或u)和L(或l)一起表示,L与U的先后顺序无关。例如:49

26、321ul,37825LU,41152Lu;,4) 无后缀时,整型常量类型按如下顺序确定:int, (unsigned), long, unsigned long,十进制时无,常量(续),二、浮点型常量,由整数部分和小数部分构成;,只有十进制表示;,一般表示形式(小数表示形式):,整数部分与小数部分可以省去一部分,但不能全部省去;,例如:5.,.25,4.07,常量(续),科学表示形式:,在小数表示法后面加E(或e)表示指数;,例如:23.5E6,.032E-5,.3e10,指数部分可正可负,但必须为整数;,浮点常量的缺省数据类型为double型;,后缀F(或f)表示float类型;,后缀l(

27、或l)表示long double类型;,常量(续),三、字符常量,由一对单引号括起的一个字符表示;,其值为所括起字符在ASCII表中的编码;,所括起字符的表示方法:,图形表示法,该方法适用于有图形符号的可打印字符;例如:A,a,*,转义序列表示法,该方法适用于所有字符,尤其是无图形符号的不可打印字符;,常量(续),转义序列表示方法:以反斜线()开头,后跟字符的ASCII码值;,八进制表示:ddd;例如:101,十六进制表示:xhh;例如:x41,表2-2C+中常用转义序列符,常量(续),四、布尔常量,有两个值:true和false;,五、字符串常量(串常量,字符串),一对双引号括起的字符序列,

28、字符序列可以包含空格、转义序列或任何其他字符,这些字符不一定是C+字符集中的字符,只要C+编译器支持即可;,例如:This is a string; ,串常量与字符常量的区别:,常量(续),由一个字符型变量存放,由一维数组存放,字符常量,串常量,用单引号括起,用双引号括起,字符串有一个结束符,该结束符用0表示,字符常量a在内存中占用一个字节,字符串常量a在内存中占用两个字节,可进行加、减法运算,可进行连接、拷贝运算,常量(续),六、符号常量,用来表示C+中的常量,即用一个与常量相关的标识符来替代常量;,优点:增加可读性,增强可维护性;例如:PI表示3.1415926,定义方法:使用类型说明符c

29、onst;例如:const int size=80;,定义的符号常量必须初始化;,一个符号常量可看作是一个只读变量,由const定义的常量的值不可以改变;,与#define的区别?,1.3.2 用const定义常变量宏定义:(1)#define PI 3.14159(2)#define A 2 #define B 3 #define C A+B coutb?a:b),1.3C+对C的补充,注意:(1)只是替换(2)没有类型检验(3)而且是在编译前进行,不分配存储空间(4)末尾没有分号,有分号作为宏体的一部分(5)不能有单行注释(6)位置只在文件的上方,1.3C+对C的补充,用const定义符号

30、常量的方法:(1)int const a=3;(2)const int a=3;注意:位置可以任意(局部和全局)要带分号有类型检测,有空间分配,是编译时决定的,其它变量是运行时决定一旦定义后,不能作为左值,1.3C+对C的补充,常指针,Line1:#include Line2:const double pi=3.1415;Line3:const double r;Line4:void main()Line5:Line6: double perimeter,area;Line7: perimeter=2*pi*r;Line8: pi=3.14;Line9: area=pi*r*r;Line10:

31、 coutperimeter, areaendl;Line11:,常量(续),const double r=3.2;,错误,错误,不能修改pi的值,#define与const定义符号常量的区别,const产生一个具有类型的符号,#define仅产生文本替换,而不管内容是否正确,const double PI=3.1415;,#define PI 3.1415,使用const可以定义一个局部常量,可局部在一个函数体内,用#define定义的常量的作用域是从定义时开始,直到使用#undef取消定义时为止,如果不取消定义,直到整个文件结束,使用const定义常量是一个说明语句,用分号(;)结束,使用

32、#define定义常量是一个预处理命令,不能用分号(;)结束,地址值,变量,一、变量的三个基本要素,名字,类型,值,三要素,数据值,地址值,int c;c=5;,变量类型,变量名,数据值,二、变量的定义,可以在程序中随时定义变量,只要在该变量被使用前定义即可;,定义格式:;例如:int a,b,c;double x,y,z;,变量(续),同一程序块内不可以定义同名变量;,初始值,变量定义时可赋初始值;,声明格式:,数据类型 标识符1(初始值1), ,标识符n(初始值n);数据类型 标识符1=初始值1, ,标识符n=初始值n;,例如:double price=15.5;int size=100;

33、,未被初始化的变量的值或者是默认值,或者是无效值,由变量类型决定;,变量可被赋值,由变量名标识;,1.3.7 引用(C+),标识对象的一种机制;,对对象存储地址的抽象,但引用不是值;,引用有类型;,变量的别名;,1、定义格式, ,2、初始化与赋值,定义引用时必须初始化;,可以将一个引用赋给某个变量;,引用可被赋值;,引用(续),示例:int a=3;int ,8,m,定义引用并初始化,将引用赋值给变量,a=8,对引用的操作就是对被引用者的操作,3、引用的功能,用做函数的参数或函数的返回值;,函数不能返回对局部对象的引用;,引用(续),示例:int,错,r是局部对象,4、指针与引用的区别,指针通

34、过地址间接访问某个变量,引用通过别名直接访问某个变量;,引用必须初始化,一旦被初始化后不得再作为其他变量的别名;,正确:int ,为什么?,引用(续),例1:分析下列程序的输出结果。,#include void main() int val(5); int ,输出,101010,引用(续),例2:分析下列程序的输出结果。,#include int,输出:13557,r,55,引用(续),对引用的进一步说明:,(1)不能建立void类型的引用; void ,int /错,引用(续),对引用的进一步说明:,(4)可以建立指针变量的引用;int i=5; int *p=,引用(续),对引用的进一步说

35、明:,(6)可以用常量或表达式对引用进行初始化,但此时必须用const作声明。 const 思:为什么要用const呢?,算术运算符,1、普通算术运算符,单目算术运算符:-(取负)、+(取正);,双目算术运算符:+、-、*、/、%(只用于int型);,单目运算符优先级高于双目运算符;,2、增1和减1运算符,单目运算符:+、-;,+运算符的功能:,由该运算符组成的表达式具有一定的值;,由该运算符组成的表达式计算后,其变量值要发生改变;,算术运算符(续),+运算符的两种方式:前缀方式与后缀方式;,前缀方式与后缀方式的区别:,前缀运算表达式的值为原来变量值加1;,后缀运算表达式的值为原来变量值;,两

36、种方式的变量的值都加1;,示例:int a(1);+a;int b(1);b+;,表达式+a的值为2,变量a的值为2;,表达式b+的值为1,变量b的值为2;,关系运算符,双目运算符:、=、=、=、!=,前四种优先级高于后两种;,逻辑运算符,双目运算符:&、|,优先级:&、|、!,单目运算符:!,位操作运算符,1、逻辑位运算符,单目逻辑位运算符:,双目逻辑位运算符:&、|、,双目逻辑位运算符的优先级:&、|、;,2、移位运算符,双目运算符:;,时移掉的位被丢弃,右边移出的空位补0;,时移掉的位被丢弃,左边移出的空位补0或符号位;,赋值运算符,简单赋值运算符:=,复合赋值运算符:+=、-=、*=、

37、/=、%=、&=、|=、=、=,其他运算符,1、三目运算符,格式:d1?d2:d3,功能:先计算d1,若其非零,表达式的值为d2的值,否则为d3的值;,表达式类型:d2和d3中类型较高者的类型;,2、逗号运算符,格式:d1,d2,dn,表达式的值和类型:由最后一个表达式确定;,优先级在所有运算符中最低;,3、sizeof运算符,其他运算符(续),格式:,功能:返回其后的类型说明符或表达式所表示的数在内存中所占的字节;,4、单目运算符&和*,&:取地址;,*:用在指针名前,表示取指针的内容;,5、强制类型运算符,sizeof();或sizeof();,格式:, ();或 () ;,其他运算符(续

38、),强制类型转换可将高类型转换为低类型,是一种不安全的转换;,示例:double f(3.85);int h;h=int(f);,该转换是暂时的,一次性的;,示例:int a(3),m;double b;b=3.56+double(a);m=a+5;,表达式的种类,由运算符和操作数组成的式子;,常见的表达式,算术表达式;,逻辑表达式;,关系表达式;,赋值表达式;,条件表达式;,逗号表达式;,表达式的种类(续),注意事项:,连续的两个运算符之间用空格分隔;,可用括号来改变运算符优先级;,双目运算符的左右可以用空格符和操作数分开;,过长的表达式可分成几个表达式;,表达式的值和类型,一、确定表达式的

39、值,二、表达式求值方法与确定类型的方法,先确定运算符的功能;,确定计算顺序:先考虑优先级,再考虑结合性;,表达式的值和类型(续),例1:分析下列程序的输出结果(算术表达式)。,#include void main() unsigned a(0 xab),b(20); a,输出:020-1 1,表达式的值和类型(续),例2:分析下列程序的输出结果(关系表达式)。,#include void main() char x(m),y(n); int n; n=x3)+(y-x=1); coutnendl; ,输出:113,表达式的值和类型(续),例3:分析下列程序的输出结果(逻辑表达式)。,#incl

40、ude void main() int x,y,z; x=y=z=1; -x ,输出:011122212,注意逻辑表达式的求值方法,表达式的值和类型(续),例4:分析下列程序的输出结果(条件表达式)。,#include void main() int a(3),b(4),c; c=ab?+a:+b; couta,b,cendl; c=a-b?a+b:a-3?b:a; couta,b,cendl;,3,5,53,5,8,注意三目运算符的判断条件,输出,表达式的值和类型(续),例5:分析下列程序的输出结果(赋值表达式)。,#include void main() int x(1),y(3),z(5

41、); x+=y*=z-=2; coutx, y, zendl; x*=y/=z-=x; coutx, y, zendl; x=y=z=2; z=(x+=2)+(y+=4)+2; coutx, y“, zendl; ,输出:10,9,3-10,-1,-74,6,12,表达式的值和类型(续),例6:分析下列程序的输出结果(逗号表达式)。,#include void main() int a,b,c; a=1,b=2,c=a+b+3; couta, b, cendl; c=(a+,a+=b,a+b); couta, b, cendl;,1,2,64,2,6,输出,表达式中的类型转换,一、隐含转换,双

42、目运算中操作数的类型转换;,是一种保值转换,转换类型由低到高;,转换规则:,二、强制转换,显式强制转换(通过强制转换运算符实现);,表达式中的类型转换(续),隐式强制转换:,在赋值表达式中,当左值(赋值运算符左边的值)和右值(赋值运算符右边的值) 的类型不同时,一律将右值类型强制转换为左值的类型;,在函数有返回值的调用中,将return后面的表达式的类型强制转换为该函数的类型;,类型定义,1、格式,typedef ;,例如:typedef double wages,bouns;wages weekly;bouns monthly;,2、自定义类型的作用,改善程序的可读性,增加所定义变量的信息,

43、书写简练,提高程序的可移植性,预处理和语句,预处理功能语句选择语句循环语句转向语句,预处理功能,一、预处理命令及预处理功能,1、预处理命令,C+源程序中包含的各种编译命令在程序被正常编译之前执行;,预处理命令不是C+语言的一部分;,2、预处理功能,由预处理命令实现的功能;,二、常用的预处理命令,文件包含命令,宏定义命令,预处理功能(续),以 # 为引导;,每条预处理命令单独占用一行,同一行不能有其他预处理命令和语句;,三、预处理命令使用说明,条件编译命令,停止编译命令,预处理命令的位置可以放在开头、中间和结尾;,预处理命令可以续行,续行符为 ;,预处理命令不是语句,不能以分号(;)结束;,文件

44、包含命令,一、功能,指示C+编译器将一个文件(头文件)的内容 嵌入到该指令所在的文件中该指令所在位置处;,头文件指存放与标准函数有关的信息,或者存放符号常量、类型定义、类和其他复杂类型的定义以及与程序环境相关信息的.h文件;,二、格式,#include ,由系统提供并放在指定子目录中的头文件;,#include 文件名,由用户定义,放在当前目录或其他目录下的头文件或其他源文件;,文件包含命令(续),三、说明,文件包含命令一般放在程序头;,一条文件包含命令只能包含一个文件;,文件名:myfile.h#include myfile2.h#include myfile3.h,文件包含命令可以嵌套;,

45、包含文件不易过多;,条件编译命令,一、功能,用来定义某些编译内容要在满足一定条件下才参与编译,否则不参与编译;可使同一源程序在不同的编译条件下产生不同的目标代码。,二、格式,格式一:#ifdef #else#end if或#ifdef #end if,条件编译命令(续),格式二#ifndef #else#end if或#ifndef #end if,格式三#if #elif #elif .#else#end if,条件编译命令(续),例1:分析下列程序的输出结果。,#include #define A 10void main() #if A0 cout0endl; #elif A0 couta

46、0endl; #else couta=0endl; #end if,输出:a0,条件编译命令(续),例2:避免重复引用某个头文件。,条件编译命令(续),例3:用于调试。,调试时:#define DEBUG 1.#if DEBUG=1 coutOKendl;#end if.,调试后:#define DEBUG 0.,停止编译命令,一、格式,#error ,二、功能,当编译器遇到该指令时,显示“字符序列”,即错误信息,然后停止对该程序的编译,从而可以在编译阶段发现程序中的错误;,三、示例,假设country值为:US、ENGLAND、CHINA程序中有如下语句:,停止编译命令(续),/#else

47、#error You define country incorrectly#endif,当country的值不是上述三者之一时,编译器将显示:,然后停止编译。,You define country incorrectly,语句,1、表达式语句和空语句,表达式语句:任何一个表达式加上分号(;);,空语句:只有一个分号(;)的语句;,2、复合语句和分程序,复合语句:由两条或两条以上的程序构成,并由一对花括号括起;,分程序:又称块结构,含有一条或多条说明语句的复合语句;,条件语句,if () else if () else if () .else if () else ,说明:,if语句可以嵌套,在

48、此情况下,else与最近的一个没有与else配对的if配对。,开关语句,switch ()case :case :.case :default ,注意:,在执行语句序列中如果遇到break语句,则退出switch语句,执行后面的语句;如果其后的语句序列中没有break语句,则一直执行至switch语句结束。,开关语句(续),例3:分析下列程序的输出结果。,输出:4,5,循环语句,1、while循环语句,while () ;,2、do-while循环语句,do while ();,do-while循环与while循环的区别:,do-while循环至少执行一次循环体,while循环可能一次也不执行

49、循环体;,3、for循环语句,for (d1;d2;d3) ;,4、多重循环,转向语句,1、goto语句,格式:goto ;,goto语句只能在一个函数内进行转向;,2、break语句,格式:break;,适用情况:,用于开关语句的语句序列中,其功能是退出开关语句,执行其后的语句;,用于循环体中,其功能是用来退出该重循环;,3、continue语句,格式:continue;,功能:在循环体中用来结束本次循环;,函数和作用域,函数的基本概念函数的定义和说明函数的调用函数的参数内联函数函数重载异常处理基础作用域,返回类型为void类型的函数抽象为过程抽象,函数的基本概念,函数结构:由花括号括起来的

50、一个语句序列;,函数抽象:使用标识符对语句序列进行的抽象;,函数调用:函数级上的控制抽象,一种控制转移;,参数化:在函数抽象中对其所操作的值进行抽象的过程;,形参与实参,函数抽象与过程抽象,函数抽象的目的是进行求值,过程抽象的目的是更新对象,C+中只有函数抽象,函数的定义格式, (),说明:,为函数返回值类型,若为void,则为过程调用;,中的参数为形参,在函数被调用时进行初始化,从而从被调用处获得数据;,函数的说明方法(函数的声明),一、函数的说明原则,如果一个函数定义在先,调用在后,调用前可以不必说明;,如果一个函数定义在后,调用在先,调用前必须说明;,二、函数的说明方法(原型说明), (

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号