收藏 分销(赏)

面向对象程序设计之类和对象实用全套PPT.ppt

上传人:二*** 文档编号:12509702 上传时间:2025-10-22 格式:PPT 页数:54 大小:277.54KB 下载积分:5 金币
下载 相关 举报
面向对象程序设计之类和对象实用全套PPT.ppt_第1页
第1页 / 共54页
本文档共54页,全文阅读请下载到手机保存,查看更方便
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,C+,2,-,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,面向对象程序设计(chn x sh j)之类和对象,第一页,共54页。,2.1 面向对象程序设计方法(fngf)概述,什么是面向对象的程序设计?,面向对象的程序设计(Object-Oriented Programming)和传统的结构化程序设计的思路完全不同。,面向对象的程序设计和人们日常生活解决问题的思路是相似的。,比如,我们生产汽车时,不是顺序制造发动机,在设计制造底盘、车身、轮子。而是分别设计制造发动机、底盘、车身和轮子,最后(zuhu)组装在一起。组装时,各部件之间有联系,以便协调工作。例如,司机踩油门,就能调节油路,控制发动机的转速,就能驱动车轮。,第二页,共54页。,2.1 面向对象程序设计方法(fngf)概述,程序设计者的任务有两个:一是设计所需要的类和对象,即确定那些数据和操作封装在一起;(类设计者、核心模块产品提供商),二是考虑怎样向有关对象发送消息,以启动相关对象的操作。,(主程序设计者,外包程序,面向用户的公司),编程者如同一个总调度,不断地向各个对象发出命令,让这些(zhxi)对象活动起来,完成指定的工作。,这就是面向对象的程序设计的基本思路。,第三页,共54页。,2.1 面向对象程序设计(chn x sh j)方法概述,什么是对象(duxing)(object)?,一个对象(duxing)由一组“属性”和一组“行为”构成。并根据外界给它的消息进行相应的操作。系统中多个对象(duxing)通过一定的渠道相互联系。,任何事物都可以看成一个对象(duxing)。可以是自然物体,也可以是逻辑结构。,例:一个班级作为对象(duxing),一个班级作为对象(duxing),有两个要素:一是班级的静态特征,如班级所属的专业,学生人数、班主任姓名等,这种静态特征称为“属性”;另一个是班级的动态特征,如上课,体育比赛,开会等,称为“行为”。外界向班级发一个信息(如上课铃声,广播通知),我们称之为“消息”,班级就会发生一个操作(要么上课,要么开会),第四页,共54页。,2.1 面向对象程序设计(chn x sh j)方法概述,什么是C+对象?,C+中,每个对象都由若干数据(属性)和若干函数(hnsh)(操作行为)组成。数据就是对象的“属性”,函数(hnsh)就是用来对数据进行的“操作”,以便实现某种功能。这种操作就是对象的“行为”,也叫“方法”。,我们点击一下鼠标,按动键盘的一个按钮,就是给某个对象一个消息,系统回调用该对象中的函数(hnsh)进行操作。,比如长方形对象,其长和宽就是它的属性,调用该对象的一些函数(hnsh),即向该对象传送一些消息,可以用来对其长、宽值进行加工计算,以实现求出面积、周长等功能。,第五页,共54页。,2.1 面向对象程序设计方法(fngf)概述,什么是对象封装(encapsulation)?,就是把对象的不想让外界知道的属性和功能屏蔽起来,让外界看不见。封装有两个含义,,一是将有关的数据和操作函数封装成一个基本单位,即对象内。各对象之间相互独立,互不干扰;,二是将对象中的部分属性或功能对外隐蔽,只留少数接口向外公布,以接收外界信息。,对象封装的好处在于,降低了人们操作对象的复杂程度。使用对象的人,不必知道对象内部的实现细节,只需要了解外部功能就可以自如地操作该对象。,对象的行为(xngwi)由类的内部数据结构和相关的操作确定;外部行为(xngwi)通过操作接口实现。人们关心的就是操作接口(函数名)所能提供的服务。,第六页,共54页。,2.1 面向对象程序设计(chn x sh j)方法概述,什么是抽象(abstraction)?,将具有相同特性的事物归纳、集中成一个统一类型,称为抽象。比如,把张三,李四,王五归纳为一类,我们称之为“人”。,抽象的作用,是表示同类事物的本质(bnzh)。,C和C+中,数据类型就是对一批具体数据的抽象,整形数据就是所有整数的抽象。,“类”是“对象”的抽象,“对象”则是类的“特例”,或“具体表现形式”。,第七页,共54页。,2.1 面向对象程序设计方法(fngf)概述,什么是继承(inherit)?,B类在A类的基础上增加了少量(sholing)内容。我们显然不必重新设计一个新类B,只需要把A类拿过来,在此基础上添加新内容就可以了。这就是面向对象程序设计的继承机制。,C+提供继承机制,大大节省了编程工作量,这就是所谓“软件重用(software reusability)”的思想。对于大型软件的开发具有重要意义。,第八页,共54页。,2.1 面向对象程序设计(chn x sh j)方法概述,什么是多态性(polymorphism)?,如果有几个相似而不同的对象,人们往往要求在向它们发出同一个消息时,各自作出不同的操作,这种情况就是“多态现象”。,C+中,所谓多态性是指,由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。,显然,多态性能增加(zngji)程序的灵活性,它是面向对象程序设计的重要特征。,第九页,共54页。,2.1 面向对象程序设计方法(fngf)概述,类与对象的作用,C+全面支持传统的面向过程的程序设计(即结构化编程),也支持基于对象和面向对象的程序设计。,所谓基于对象,是指程序是以类和对象为基础,程序的操作是围绕对象进行(jnxng)的。,所谓面向对象,是指,在基于对象的基础上,利用了继承机制和多态性。,面向对象的程序设计特点:,类具有对数据的抽象性、封装性、继承性、多态性。,第十页,共54页。,2.2 类的声明(shngmng)和对象的定义,类和对象的关系,C+中,对象的类型称为类(class)。类代表了某一批对象的共同特性。前面已经谈到,类是对象的抽象,而对象是类的具体实例(instance)。就象结构体类型和结构体变量一样。,C+中,我们先声明一个类的类型,然后再定义该类的若干(rugn)对象。对象就是类这种类型的一个变量。,类是抽象的,不占内存,而对象是具体的,要占用内存空间。,第十一页,共54页。,2.2 类的声明和对象(duxing)的定义,类的声明,类的声明方法和结构体的声明方法一样,只是(zhsh)将关键字struct 换成class:,class 类名,private:,私有数据成员和私有成员函数;,public:,公共数据成员和公共成员函数;,;,/成员访问限定区域先后次序任意,但一种最好只出现一次,类的成员包含对数据操作的函数,体现了数据和操作的封装,类的成员不能所有都私有,一般隐藏数据,把成员函数作为对外接口,成员(chngyun)访问限定符,(member access specifier),成员访问限定符,(member access specifier),别忘了必须用分号结束!,第十二页,共54页。,2.2 类的声明和对象(duxing)的定义,类的声明(shngmng)示例,类头:class rectangle,类体:private:,int length,width,area,perimeter;,public:,void PutArea(),area=length*width;,void PutPerimeter(),perimeter=(length+width)*2;,void display(),cout “length=“length endl;,cout “width=“width endl;,cout “area=“area endl;,cout “perimeter=“perimeter endl;,;,在类的外面不能访问私有成员,,只能通过(tnggu)公有成员函数间接访问,在类的外面可以访问公有成员,不指定公有私有,则默认为私有,一般先出现,private,,后出现,public,第十三页,共54页。,类的声明(shngmng),还有一种protected类型,不能被类外访问,但可以被派生类访问,一般使用厂商(chngshng)提供的类库,也可以自定义类库,便于单位部门使用,第十四页,共54页。,2.2 类的声明和对象(duxing)的定义,对象的定义,声明了类以后,就可以定义该类的对象了。给对象分配了存储空间。,其格式为:,class 类名 对象名1,对象名2,/方括号表示可选项,对象定义示例,如前例中,声明了一个名为 rectangle 的类,我们(w men)可以定义该类的若干对象:,class rectangle r1,r2,r3;,rectangle r1,r2,r3;,第十五页,共54页。,2.2 类的声明和对象(duxing)的定义,对象定义,class rectangle,private:,int length,width,area,perimeter;,public:,void PutArea(),area=length*width;,void PutPerimeter(),perimeter=(length+width)*2;,void display(),cout “length=“length endl;,cout “width=“width endl;,cout “area=“area endl;,cout “perimeter=“perimeter endl;,r1,r2;,不出现(chxin)类名,直接定义对象,不提倡,第十六页,共54页。,2.2 类的声明(shngmng)和对象的定义,类和结构(jigu)体类型异同,struct/class rectangle,public/private:,int length,width,area,perimeter;,void PutArea(),area=length*width;,void PutPerimeter(),perimeter=(length+width)*2;,void display(),cout “length=“length endl;,cout “width=“width endl;,cout “area=“area endl;,cout “perimeter=“perimeter endl;,r1,r2;,建议(jiny)使用CLASS,第十七页,共54页。,2.3 类的成员(chngyun)函数,成员函数的性质,类的成员函数也叫类函数,用法和一般函数基本上一样。区别在于它只是属于一个类的成员而出现在类中。它可以被指定为类的私有成员(private)、公有成员(public)或保护成员(protected)。,使用类函数时,要注意它的使用权限,如果是私有成员,只能被本类的其他(qt)成员函数调用,不能被类外调用(工具函数)。成员函数可以调用本类所有数据成员和成员函数,也可以引用在本作用域中的有效数据。,通常,我们把类的数据成员定义成私有成员,对外屏蔽,而把成员函数定义成公有成员,他可以调用私有成员和其它成员。,一个类若没有成员函数,就退化成C语言的结构体,而失去意义。,第十八页,共54页。,2.3 类的成员(chngyun)函数,在类外定义成员函数,成员函数一般在类体中定义,如前面所讲。也可以在类外定义,但要指明是属于(shy)哪个类的成员函数,用“类名:函数名”来指定。例如:,class rectangle,private:,int length,width,;,int area,perimeter;,public:,void PutArea();,void PutPerimeter();,void display();,;,void rectangle:PutArea(),area=length*width;,void rectangle:PutPerimeter(),perimeter=(length+width)*2;,void rectangle:display(),cout “length=“length endl;,cout “width=“width endl;,cout “area=“area endl;,cout “perimeter=“perimeter;,rectangle r1,r2,r3;,第十九页,共54页。,“:”成为域限定符。如果在域限定符前没有类名,或函数名前既没有类名,又没有域限定符:,:display()或 display(),则表示该函数不属于任何类,它不是成员函数,而是全局(qunj)函数,即普通函数。,第二十页,共54页。,一般来说,类定义包括两个部分:,1、声明部分(“做什么(shn me)”):,数据成员(名称、类型),成员函数(方法),2、实现部分(“怎么做”):,成员函数的定义和实现,声明在定义之前,也即是类体外定义成员函数(这里用定义,实际是给函数分配了空间,后章节详述),减小了类体长度,隐藏了执行细节,提高了类的保密性,第二十一页,共54页。,2.3 类的成员(chngyun)函数,inline 成员(chngyun)函数,类的成员(chngyun)函数也可以指定为内联函数,只要是函数代码较少,有频繁使用。我们只要在成员(chngyun)函数的类型签名加上inline 关键字就可以。,class rectangle,private:,int length,width,;,int area,perimeter;,public:,inline void PutArea();,inline void PutPerimeter();,void display(),cout “length=“length endl;,cout “width=“width endl;,cout “area=“area endl;,cout “perimeter=“perimeter endl;,第二十二页,共54页。,2.3 类的成员(chngyun)函数,inline 成员(chngyun)函数,class rectangle,private:,int length,width,;,int area,perimeter;,public:,inline void PutArea();,inline void PutPerimeter();,void display();,;,void rectangle:display(),cout “length=“length endl;,cout “width=“width endl;,cout “area=“area endl;,cout “perimeter=“perimeter;,Inline,第二十三页,共54页。,2.3 类的成员(chngyun)函数,inline 成员函数,类体中不包含循环控制结构,此类成员函数自动作为inline 成员函数。,类体外也可定义inline 成员函数,声明、定义其一显式定义即可,类定义和其成员函数定义必须在同一(tngy)文件(或包含)。,第二十四页,共54页。,2.3 类的成员(chngyun)函数,成员函数的存储(cn ch)方式,同一类定义了多个对象时,每个对象的数据成员各自占据独立的空间,而共享一个共用的函数代码段,不占用对象的存储(cn ch)空间。,C+为此专门设立了一个名为 this 的指针,用来指向不同的对象。当调用对象r1,成员函数访问的就是r1的数据成员。所以成员函数建议在类体外定义。,数据,1,对象,r1,数据,2,对象,r2,数据,10,对象,r10,共用函数代码,第二十五页,共54页。,2.4 对象(duxing)成员的引用,用对象(duxing)名和成员运算符(.)访问对象(duxing)成员,举例:,class rectangle,public:,int length,width;/公共数据成员,void display();/公共成员函数,;,void rectangle:display(),cout“area=“length*width ednl;,cout“perimeter=“length,class rectangle,public:,int length,width;/公共(gnggng)数据成员,void display();/公共(gnggng)成员函数;,void rectangle:display(),cout“area=“length*width ednl;,cout“perimeter=“lenght=5;,p-width=4;,p-display();,用这种方式万分的成员,也必须定义成公用成员!,第二十七页,共54页。,2.4 对象(duxing)成员的引用,用对象的引用访问对象成员(chngyun),举例:,class rectangle,public:,int length,width;/公共数据成员(chngyun),void display();/公共成员(chngyun)函数,;,void rectangle:display(),cout“area=“length*width ednl;,cout“perimeter=“t2.hour;,cint2.minute;,cint1.sec;,coutt1.hour:t1.minute:t2.sect2.hour;,cint2.minute;,cint1.sec;,coutt1.hour:t1.minute:t2.sect1.hour;,cint1.minute;,cint1.sec;,coutt1.hour:t1.minute:t1.sect2.hour;,cint2.minute;,cint2.sec;,coutt2.hour:t2.minute:t2.sect.hour;,cint.minute;,cint.sec;,void show_time(Time&t),coutt.hour:t.minute:t.secendl;,第三十四页,共54页。,例:定义(dngy)含默认值参数的set_time和show_time函数,#include,class Time,public:,int hour;,int minute;,int sec;,;,int main(),Time t1;,set_time(t1,12,23,34);,show_time(t1);,Time t2;,set_time(t2);,show_time(t2);,第三十五页,共54页。,例,#include,using namespace std;,class Time,public:,int hour;,int minute;,int sec;,;,int main(),void set_time(Time,void show_time(Time,Time t1;,set_time(t1,12,23,34);,show_time(t1);,Time t2;,set_time(t2);,show_time(t2);,return 0;,void set_time(Time&t,int hour=9,int minute=30,int sec=0),t.hour=hour;,t.minute=minute;,t.sec=sec;,void show_time(Time&t),coutt.hour:t.minute:t.sechour;,cinminute;,cinsec;,void Time:show_time(),couthour:minute:sechour;,cinminute;,cinsec;,void Time:show_time(),couthour:minute:sect.hour;,cint.minute;,cint.sec;,void show_time(void),coutt.hour:t.minute:t.secendl;,int main(),set_time();,show_time();,return 0;,第四十页,共54页。,例2.4 P61,#include,using namespace std;,class Array_max,public:,void set_value();,void max_value();,void show_value();,private:,int array10;,int max;,;,int main(),Array_max arrmax;,arrmax.set_value();,arrmax.max_value();,arrmax.show_value();,return 0;,第四十一页,共54页。,2.6 类的封装和信息隐蔽,公用接口和私有实现的分离,我们已经学到,C+通过类的封装,将类的数据成员和成员函数集成到一个类中。而一般在类的声明时,往往把数据成员指定成私有的,使它们与外界隔离,即,不能在类外直接使用私有成员,外界只能通过类的公有函数,间接进行对私有成员的操作。换句话说,外界与类的私有成员的唯一联系渠道,就是该类的公有成员函数。,所以,我们一般把成员函数指定成公有的(public)性质(除非某些成员函数不想让外界调用)。,这就是所谓的“外部接口”与内部实现的分离,以起到信息隐蔽的作用。而这是软件工程最基本(jbn)的原则。,第四十二页,共54页。,定义一个类就是实现对创建一个对象的数据结构的描述。,在类中,一些成员是保护的,被有效地屏蔽,以防外界的干扰和误操作。,另一些成员是公共(gnggng)的,作为接口提供外界使用。,右图是对它们采用的图示方法说明类的组成结构。以Point 类为例。,xoffset,yoffset,set,angle,radius,x,y,封装体,内部数据成员,Point,类,访问接口,第四十三页,共54页。,2.6 类的封装和信息隐蔽,类声明和成员函数定义的分离,当一个类被多个程序使用时,一般将类的声明(包括成员函数的声明)放在指定的头文件中,用户在编程时,将该头文件包含近来就可以了。而不必在每个使用该类的程序中重复书写(shxi)该类的声明。,我们然后可以直接在程序中直接定义该类的对象,直接调用该类的公有成员函数。为了实现信息隐蔽,对类的成员函数的定义一般不放在头文件中,而放在另一个文件中。,然后按照对多文件程序的编译和运行方法对程序进行编译和连接。请看下面示例。,第四十四页,共54页。,2.6 类的封装和信息隐蔽,/rectangle.h,class rectangle,private:,int length,width;,public:,void Put();,void display();,/,rectangle.cpp,#include,#include“rectangle.h”,void rectangle:Put(),length=5;,width=4;,void rectangle:display(),cout“area=“,length*width hour;,cinminute;,cinsec;,void show_time(void),couthour:minute:sechour;,cinminute;,cinsec;,void Time:show_time(void),couthour:minute:secendl;,Time t;,int main(),t.set_time();,t.show_time();,return 0;,第五十一页,共54页。,void show_time(Time,类具有对数据的抽象性、封装性、继承性、多态性。,所以,我们一般把成员函数指定成公有的(public)性质(除非某些成员函数不想让外界调用)。,#include iostream.,对象就是类这种类型的一个变量。,#include,show_time();,这就是所谓的“外部接口”与内部实现的分离,以起到信息隐蔽的作用。,length=5;,区别在于它只是属于一个类的成员而出现在类中。,#include,int main(),int t=x;x=y;y=t;,类具有对数据的抽象性、封装性、继承性、多态性。,这就是面向对象的程序设计的基本思路。,2分钟,01、下列关于C+函数的叙述中,正确的是()。,A)每个函数至少要具有一个参数 B)每个函数都必须返回一个值,C)函数在被调用之前必须先声明 D)函数不能自己调用自己,02、下列关于类和对象的叙述中,错误的是()。,A)一个类只能有一个对象 B)对象是类的具体实例,C)类是对某一类对象的抽象(chuxing)D)类和对象的关系是一种数据类型与变量的关系,03、对于语句 coutxendl;错误的是描述是()。,A)“cout”是一个输出流对象 B)“endl”的作用是输出回车换行,C)“x”是一个变量 D)“”称作提取运算符,1,、,C 2,、,A 3,、,D,第五十二页,共54页。,5分钟,4、面向对象程序设计有四个主要特点,即抽象、封装、_和_。,5、在用class定义一个类时,数据成员和成员函数的默认访问(fngwn)权限是_。,6、写出执行下面程序的输出结果。,void fun(int&x,int y),int t=x;x=y;y=t;,int main(),int a2=23,42;,fun(a1,a0);,std:couta0,a1std:endl;,return 0;,4、继承(jchng)多态,5、私有,6、23 23,第五十三页,共54页。,谢谢(xi xie)观看,第五十四页,共54页。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服