收藏 分享(赏)

c++教案(全).ppt

上传人:天天快乐 文档编号:571756 上传时间:2018-04-12 格式:PPT 页数:205 大小:2.85MB
下载 相关 举报
c++教案(全).ppt_第1页
第1页 / 共205页
c++教案(全).ppt_第2页
第2页 / 共205页
c++教案(全).ppt_第3页
第3页 / 共205页
c++教案(全).ppt_第4页
第4页 / 共205页
c++教案(全).ppt_第5页
第5页 / 共205页
点击查看更多>>
资源描述

1、面向对象的编程技术,目前有两种重要的程序设计方法,分别是 和 。,结构化程序设计,面向对象程序设计,面向对象的编程技术,以下属于面向对象的编程语言有( )A C语言 B C+语言 C C#语言 D JAVA语言 E VB F VC+,面向对象技术几乎覆盖计算机软件领域的所有分支。现在许多新领域以面向对象理论为基础,或作为主要技术。 比如:软件体系结构、领域工程、设计模式和基于构件的软件工程、智能代理等。,面向对象技术概论,面向对象的 GIS,面向对象技术概论,第 一 章 面向对象技术概论,第一节 软件概念的变革,第二节 面向对象方法的发展史及现状简介,第三节 面向对象的基本思想,第四节 面向对

2、象的系统开发方法,( )的发展体现计算机科学的发展?,面向对象技术概论,1.1.1 软件设计和程序语言的发展 第一个高级程序设计语言是在20世纪50年代中期研制的FORTRAN。 60年代至少研制了200多个高级语言,其中包括APL、IMULA67等。 70年代主要集中于发展命令性语言,最著名的有PASCAL、ADA语言。 80年代是突出发展作用件语言的时代,如LISP、PROLOG、FFP等,推出了典型的面向对象程序设计语言SMALLTALK80。现在有影响的语言已超过上百种。,1.1 软件概念的发展,软件设计和程序语言,面向对象技术概论,1.1.2 软件开发原理的变革 软件工程技术的发展,

3、其目的是提高计算机性能和应用范围,其关键是提高软件质量和生产效率。 三次变革: 60年代开发的规范化设计,代表性的是瀑布方法; 70年代末开始结构化系统分析和程序设计,推广模块化设计方法; 80年代,采用面向对象技术,采用面向对象的软件开发方法;,最新技术:COM、COM+组件技术,面向对象技术概论,1.2 面向对象方法的发展史及现状简介,1.2.1 面向对象方法的发展史 一 雏形阶段 60年代挪威计算中心开发的Simul 867是面向对象语言的先驱和第一个里程碑 (首先引入了类的概念和继承机制)。 70年代CLU、并发Pascal、Ada和ModMla2等语言对抽象数据类型理论的发展起到重要

4、作用(支持数据与操作封装),犹他大学博士生AIan Kay设计了一个实验性语言FIex。从SiMul 867中借鉴了许多概念,如类、对象、继承等. 1972年PARC 研究中心发布了SmalltaIk72,其中正式使用了“面向对象”这个术语。SmalltaIk的问世标志着面向对象程序设计方法的正式形成。但是这个时期的SmalltaIk语言还不够完善。,面向对象技术概论,1.2.1 面向对象方法的发展史 二 完善阶段 PARC先后发布了SmalltaIk72 76 78 等版本,直至1981年推出该语言最完善的版本SmalltaIk80。 SmalltaIk80的问世被今认为是面向对象语言发展史

5、、最重要的里程碑。迄今绝大部分面向对象的基本概念 及其支持机制在SmalltaIk80中都已具备。它是第一个完善的、能够实际应用的面向对象语言。但是,Smalltalk的应用尚不够广泛,原因是: 1. 一种新的软件方法学被广泛接受需要一定的时间。 2. 商品化软件开发工作到87年才开始进行。 3. 追求纯OO的宗旨使许多软件开发人员感到不便。,面向对象技术概论,1.2.1 面向对象方法的发展史 三 繁荣阶段 自80年代中期到90年代,是面向对象语言走向繁荣的阶段。其主要表现是大批比较实用的OOPL的涌现,例如:C+、0bjective-C、CLOS、Eiffel、Actor、java 等。 到

6、90年代,面向对象的分析与设计方法己多达数十种,这些方法都各有所长,现在趋于统一。,OOPL为纯OO语言和混合型OO语言。,面向对象技术概论,目前在编程方面,普遍采用语言、类库和可视化编程环境相结合的方式,例如,VC+、DeIhpi、Java等。,1.2.2 当前的状况,不同的C+编译系统,VC+ 是由Microsoft公司推出的目前使用极为广泛的基于Windows平台的可视化编程环境。,熟悉VC+6.0 环境,1. 用C+语言编写程序,2. 对源程序进行编译,3. 将目标文件连接,4. 运行程序,5. 分析运行结果,C+程序的编写和实现,面向对象技术概论,1.3 面象对象的基本思想,面向对象

7、方法的解决问题的思路是从现实世界中的客观对象入手,尽量运用人类的自然思维方式来构造软件系统。 这与传统的结构化方法从功能入手和信息工程化方法从信息入手是不一样的。在面向对象方法中,把一切都看成是对象。,面向对象技术概论,面向对象技术概论,从现实世界中客观存在的事物出发来建立软件系统,强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这可以使系统直接映射问题域,保持问题域中事物及其相互关系的本来面貌 。(对象),用对象的属性表示事物的状态特征;用对象的服务(操作)表示事物的动态特征。(属性与服务),对

8、象的属性与服务结合为一体,成为一个独立的、不可分的实体,对外屏蔽其内部细节。(对象的封装),复杂的对象可以用简单的对象作为其构成部分。(聚合),面向对象技术概论,通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与服务,从而简化系统的构造过程及其文档。(继承),类具有封闭性,把内部的属性和服务隐藏起来,只有公共的服务对外是可见的。(类的封闭性),对象之间通过消息进行通讯,以实现对象之间的动态联系。(消息),通过关联表达类(一组对象)之间的静态关系。 (关联),对事物进行分类。把具有相同属性和相同服务的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一

9、个实例。(类),面向对象技术概论,1 . 充分利用人类日常的思维方法,强调运用人类在日常的逻辑思维中经常采用的思想方法与原则,例如分类、继承、聚合、关联等。这使得软件开发者能更有效地思考问题,并以其他人也能看得懂的方式把自己的认识表达出来。,2. 面向对象程序设计是针对开发规模较大的程序提出来的,目的是提高软件开发的效率。,优点:,面向对象技术概论,3 从软件工程的观点来看,尽管面向对象程序设计语言,已取得了很大的成功,但在软件开发的各个阶段,除了编码实现阶段有这些面向对象语言作为工具支持外,其他阶段都缺少强有力的软件工具支持。,缺点:,1 面向对象程序设计方法在处理大型软件系统时, 其对象的

10、大小及特性难以进行有效的控制。,2 由于现实世界中的许多问题涉及到多个对象的全局处理,而这种全局处理的概念不从属于任何一个对象,这与面向对象的思想不统一,并且缺乏有效的表示方法。,面向对象技术概论,在软件生命周期全过程运用面向对象方法,OOA,OOD,OOP,OOT,OOSM,面向对象技术概论,1 . 4 面向对象的系统开发方法,1.4.1 面向过程的系统开发 传统的面向过程程序设计是围绕功能进行的,用一个函数实现一个功能。所有的数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用。,在面向过程的结构化程序设计中,人们常使用这样的公式来表述程序: 程序=算法数据结构。,

11、面向对象技术概论,功能分解法,数据流法,面向对象技术概论,1.4.2 面向对象的系统开发 面向对象程序设计采取的是另外一种思路。它面对的是一个个对象。实际上,每一组数据都是有特定的用途的,是某种操作的对象。也就是说,一组操作调用一组数据。把一个算法和一组数据结构封装在一个对象中。因此,就形成了新的观念。,程序 = (对象+对象+对象+) + 消息 或: 程序 = 对象s + 消息,对象 = 算法 数据结构,1.4.3 面向对象的系统开发方法(1) 系统调查和需求分析。即对应用系统将要实现的功能以及用户对系统开发的需求进行调查研究。这是所有开发方法都必须进行的。 (2) 分析问题的性质和求解问题

12、。在繁杂的问题域中抽象地识别出对象及其行为、结构、属性、方法等。这一阶段称为面向对象分析,简称为OOA。 (3) 整理问题。即对分析的结果作进一步的抽象、归类、整理,最终以规范的形式描述对象和类。这一步称为面向对象设计,简称为OOD。 (4) 程序实现。即用面向对象的程序设计语言将上一步整理的对象和类的描述映射为应用程序软件。这一步一般称为面向对象程序设计,简称为OOP。,面向对象技术概论,1标识对象和它们的属性 标识应用系统的对象和它们的属性是面向对象设计方法中最艰难的工作。首先要搞清楚系统要解决的问题到底涉及到哪些事物以及它们在系统中的作用。,面向对象技术概论,分析与设计的基本步骤,面向对

13、象技术概论,分析与设计的基本步骤,2. 标识每个对象所要求的操作和提供的操作 标识出每一个对象执行的功能,这些功能描述对象的行为。例如窗口被打开、关闭、缩放和滚动等。同时还应关心由其它对象提供于它的操作,因为通过标识这些操作有可能导出新对象。,面向对象技术概论,分析与设计的基本步骤,3. 建立对象之间的联系和每个对象的接口 这一步建立对象和对象类之间的联系,标识出每一个对象都与什么对象和对象类有关。识别出系统中的对象和类以后,还应该识别出对象之间的相互作用,即对象的外部接口。在面向对象系统中,对象和对象之间的联系是通过消息的发送和响应来完成的。,面向对象技术概论,类的层次结构图用来描述系统中类

14、的层次关系和结构,可以跟踪基类和派生类之间的关系。,类层次结构图,面向对象技术概论,面向对象设计方法是以上步骤反复进行的过程。 没有完全形式化的方法可以保证使用面向对象的方法进行分析和设计结果的唯一性,对象及类的识别划分以及相互之间的关系并没有唯一的标准,分析和设计的结果是否合理很大程度上依赖于设计人员的经验和技巧。,1标识对象和它们的属性2. 标识每个对象所要求的操作和提供的操作3. 建立对象之间的联系和每个对象的接口,面向对象技术概论,UML 类图,Unified Modeling Language,面向对象技术概论,AO接口图,面向对象技术概论,面向对象技术概论,第2章 转向C+,2.1

15、 从C到C+的转变2.2 C+新特征,C+是于1980年在AT&T的贝尔实验室开发的一种语言,它是C语言的超集和扩展,是在C语言的基础上扩充了面向对象的语言成分而形成的。最初这种扩展后的语言称为带类的C语言,后来为了强调它是C的增强版,用了C语言中的自加运算符“+”,改称为C+语言。,关于C+与C语言的关系描述中,( )是错误的。A C 语言与C+是兼容的, C 语言是C+的一个子集 B C+对C语言进行了一些改进,从面向过程变成面向对象C C+和C都是一种以编译方式实现的高级语言D C+语言和C语言中允许的基本数据类型包括整型、逻辑型、实型、字符型,完整的声明语句格式为:数据类型 标识符1(

16、=初始值1),标识符2(=初始值2),标识符n(=初始值n);可以在声明语句中完成变量的初始化,也可以先进行声明,再在其下一条语句中完成初始化工作.,2.1 从C到C+的转变,在C语言中,一定要在程序的前面声明所有变量,在C+中则无此限制,只要在引用某变量前声明该变量就可以了。,2.1.1 变量的声明语句,下列变量的声明正确的是( )A char 89_name B bool is-loanC int class D int _abc,类型修饰符unsigned 修饰( )类型是错误的.A char B intC long int D float,C+语言所增加的输入输出操作称为流输入(str

17、eaminput)和流输出(streamoutput),相应的运算符是cin和cout。cin和cout是在头文件iostream.h中定义的C+标准输入、输出标识符,所以我们在编写任何C+程序时,如果用到C+特有的输入输出语句,程序中一定要有这条语句:# include 或 # include using namespace std;,2.1.2 特有的输入输出语句,在C+中,cin必须配合运算符“”使用,cout必须配合运算符“变量1变量2变量n;,例如:for (i=1;i=3;i+)cout“Count=“iendl,输出结果为:Count=1Count=2Count=3,float

18、a=3.45;int b=5;char c=“A”;cout“a=“a“,”cout“b=“b“,”“c=“cendl,输出结果为:a=3.45 ,b=5 ,c=A,cout表达式1表达式2表达式n;,注意:每输出一项要用一个符号。不能写成couta,b,c;用cout和c1c2ab;可以从键盘输入: 1 2 34 56.78 ,思考:如何将空格字符或回车换行符输入给字符变量?,cin变量1变量2变量n;,注意:每输入一项要用一个符号。不能写成cina,b,c;系统用空格、回车换行和Tab符作为两个数据间的分隔符,如果不使用分隔符,系统也会根据变量的类型从输入流中提取相应长度的字节。,也可以分

19、多行输入数据: 12 34 Tab56.78可以输入 1234 56.78,2.2 C+新特征,在C+中有两种注释方法:一种是标准注释(/*/),这种注释在遇到注释行多于一行的情况时能很好地发挥它的作用;另一种是当遇到只有一行注释时,可用“/”字符进行注释。,2.2.1 注释,在C+中,提供了一种符号常量用const来修饰的标识符。一个变量一旦被用const来声明,它的值就不能够再修改。如下列语句: const float PI = 3.1416; const int NUM = 10;常量类型必须在声明时就将它初始化,这种一次性初始化是为该变量设置值的唯一机会,不能再以赋值的方式改变其值。

20、const int N = 0; int n1 = N; N = 8; N+;,2.2.2 常变量类型,/正确,将一常量类型赋给一变量。/错误,常量类型不能再赋给新值。/错误,常量类型的值不能更改,int a=7,s=0;main()int a=5; s+=a+;s+=a+;printf(%d,s);,main() int x=10,y=20, t=0; if(x=y) t=x;x=y;y=t; printf(“%d %d”,x,y);,int x = 0; void main () coutx1=xendl; int x = 8; coutx2=xendl; ,输出结果为:x1 = 0x2

21、= 8,2.2.3 作用域运算符,如果程序中,其内部声明了一个变量,在程序外部声明了一个和内部变量同名的变量,则外部变量将被内部变量屏蔽。,int x = 0; void main () coutx1=xendl; int x = 8; coutx2=xendl;,则此时输出结果为: x1 = 0 x2 = 8 x3 = 0,作用域运算符“”,使被屏蔽的外部变量可见。注意:作用域运算符仅可以访问全局变量,不能用:访问函数中的局部变量。,coutx3=xx) x=y; if(zx) x=z; return x; ,在C语言中,要求一个函数名对应一个函数体,但在C+中却允许函数重名。简单来说就是多

22、个相同名字的函数出现在同一作用域内,同名函数的参数类型和个数可以完全不同.例如,定义了三个函数体,分别求两个整型数、两个实型数、三个整数中的最大数,如下: int func(int x,int y) return xx) x=y; if(zx) x=z; return x; ,2.2.7 函数重载,#include int add(int x,int y) return x+y; double add(double x,double y) return x+y; void main() int a=4,b=6; double c=2.6,d=7.4; coutadd(a,b)“,”add(c,

23、d)endl; ,#include int add(int x,int y) return x+y; int add(int x,int y,int z) return x+y+z; void main() int a=4,b=6,c=10; cout add(a,b),x) x=z; return x; ,总结: 重载函数适用于那些函数名相同、算法相同但参数个数或类型不同的问题。,练习:#include void print(int) ; void print(double); void main() print(8); print(2.978); print(12.78f); print(

24、int)3.88); void print(int n) coutn*nendl; void print(double n) coutn*nendl; ,要求通过函数来实现一种不太复杂的功能,并且要求加快速度,应选用()递归调用函数重载带默认值的函数内联函数,. 重载函数在调用时选择的依据中,错误的是()参数个数参数类型函数类型函数名字,. 在+中,关于下列设置参数默认值的描述中,正确的是()设置参数默认值只能在定义函数时设置设置参数默认值时,应该是先设置右边的再设置左边的不允许全部参数都设置默认值设置参数默认值时,应该全部参数都设置,4. 一个没有赋值 int 变量a,执行couta;语句时

25、会输出()系统报错一个固定的数以上都不对,编写一个函数把华氏温度转换成摄氏温度,温度转换公式为: C=(f-32)*5/9 在主函数中输入华氏温度值,转换后输出相应的摄氏温度值。,Template func(T x,T y) return (xy? y:x);它实际上不是一个完整的函数定义,因为T还是一个没有确定的类型。用它声明x、y只用以描述某角色在函数被操作的形式。,2.2.8 函数模板(自学),相对于C语言来说,引用类型是个“崭新”的概念,引用是为一个程序实体产生第二个名称,它本身不是一个变量,只是一个变量的别名,加在这两个名称上的操作会对同一个变量产生影响。引用类型是这样进行声明的 类

26、型 ,2.2.9 引用类型,关于引用的说明:,1.引用并不是一种的独立的数据类型,它必须与某一种类型的数据相联系.int a; float ,2.引用与其所代表的变量共享同一内存单元,具有相同的地址.int a=3;int ,int *p=,关于引用的说明:,3.对引用的初始化,可以用一个变量名,也可以用另一个引用.引用在初始化之后不能再被重新声明为另一个变量的别名.int a=3,b=4;int ,/错误,但以下情况的声明是非法的:(1)企图建立数组的引用 int ,建立指针的引用?,int i=5;int *p=,【例】#include void main() int a=8; int &

27、r = a; coutr=rendl; r+=7; coutr=rendl;,结果为:r = 8r = 15,void swap (int a,int b) int temp; temp=a; a=b;b=temp;void main() int i=3,j=5;swap(i,j);couti(p+i); for(int i = 0;i8;i+) cout(p+i) string1; cout(大于)、=(大于或等于)、=(小于或等于)等关系运算符来进行字符串的比较。,不仅可以用string定义字符串变量,也可以用string定义字符串数组。string name5=Zhang,Li,Fun,Wang,Tan;,4. 字符串数组,使用字符串变量,必须将C+标准库中的( )头文件包含进来.,string a=“c+”;int b;coutsizeof(a)endl;coutsizeof(b)endl;,下列操作的运算符是什么?字符串复制字符串连接字符串比较,

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

当前位置:首页 > 经济财会 > 经济学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报