《类与对象》PPT课件_第1页
《类与对象》PPT课件_第2页
《类与对象》PPT课件_第3页
《类与对象》PPT课件_第4页
《类与对象》PPT课件_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,+,第四章类与对象,C,2,主要内容,面向对象的基本特点类和对象构造函数和析构函数类的组合结构体与联合体,3,面向对象,目的:实现软件设计的产业化观点:自然界是由实体(对象)所组成程序设计方法:使用面向对象的观点来描述模仿并处理现实问题。要求:高度概括、分类、和抽象。,面向对象的方法,面向对象的主要特点,抽象、封装、继承、多态,4,抽象,抽象:对具体问题(对象)进行概括,抽出这一类对象的公共性质并加以描述的过程。,首先注意的是问题的本质及描述,其次是实现过程或细节抽象包括:数据抽象和行为抽象数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)行为抽象(功能抽象、代码抽象):描述某类对象的共同行为或功能特征抽象的实现:通过类的声明。,5,抽象示例,例:时钟的描述,数据抽象:inthour,intminute,intsecond,行为抽象:showTime(),setTime(),6,封装,封装:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,即将数据与操作数据的函数进行有机结合,形成“类”,其中数据和函数都是类的成员。,封装可以增强数据的安全性,并简化编程。用户不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。,7,classClockpublic:voidsetTime(intNewH,intNewM,intNewS);voidshowTime();private:inthour,minute,second;,抽象实现,例:时钟的描述,数据抽象:inthour,intminute,intsecond,行为抽象:showTime(),setTime(),时钟类,public和private用于指定成员的不同访问权限。,此处的分号不能省略!,8,继承与多态,继承:C+提供了继承机制,允许程序员在保持原有类特性的基础上,进行更具体、更详细的说明。(详见第7章),多态:同一段程序能处理多种类型对象的能力。在C+中,多态性是通过强制多态(如类型转换)、重载多态(如函数重载、运算符重载)、类型参数化和包含多态(如虚函数、模板)。(详见第8章),9,主要内容,面向对象的基本特点类和对象构造函数和析构函数类的组合结构体与联合体,10,类和对象,类是C+面向对象程序设计的核心!,类与函数,函数是结构化程序设计的基本模块,函数将逻辑上相关的数据与语句封装,用于完成特定的功能。类是面向对象程序设计的基本模块,类将逻辑上相关的数据与函数封装,是对问题的抽象描述。,类的集成程度更高,更适合大型复杂程序的开发。,类的使用:先定义后使用,11,类的定义,类的定义,class类的名称public:公有成员(外部接口)private:私有成员protected:保护型成员;,12,类的定义,注:在类中可以只声明函数原型,函数的实现(函数体)可以在类外面定义,classClockpublic:voidsetTime(intNewH,intNewM,intNewS);voidshowTime();private:inthour,minute,second;,Clockmyclock;Clocky;,13,访问权限,类的成员:数据成员(描述问题的属性)和函数成员(描述问题的行为),类的成员的访问权限控制:public,private,protected,public(公有类型、外部接口):任何外部函数都可以访问公有类型的数据和函数,private(私有类型):只能被本类中的函数成员访问,任何来自外部的访问都非法,protected(保护类型):与私有类似,区别在于继承过程中的影响不同(见第7章),14,classClockprivate:inthour,minute,second;public:voidsetTime(intNewH,intNewM,intNewS);voidshowTime();,访问权限,几点说明:,一般情况下,类的数据成员都应该声明为私有类型一个类如果没有任何外部接口,则无法使用在定义类时,不同访问属性的成员可以按任意顺序出现,修饰访问权限的关键字也可以多次出现,但一个成员只能有一种访问属性!,一般将公有类型的成员放在最前面,便于阅读。,例:,上述声明并没有为Clock分配内存,只是告诉编译器Clock是什么:包含哪些数据,有什么功能。,15,对象,对象是类的实例,即具有该类型的变量,对象的定义,类的名称对象名,例:,对象所占的内存空间只用于存放数据成员,函数成员在内存中只占一份空间,即不会在每个对象中存储副本定义对象的过程也称为类的实例化,Clockmyclock;Clocky;,声明一个类后,便可将其作为新数据类型来声明变量(即对象),16,对象成员的访问,访问对象的成员的一般形式,对象名.数据成员名,对象名.函数成员名(参数列表),例:,注:类的成员函数可以访问所有数据成员;外部函数只能访问公有成员。,myclock.showTime();myclock.setTime(16,10,28);,17,成员函数,类的成员函数的定义,与普通函数的区别:前面要加上类的名称和两个连续冒号类的成员函数可以在类外部定义,但在类内部必须声明,例:,数据类型类的名称:函数名(形参列表)函数体;,voidClock:setTime(intnewH,intnewM,intnewS)hour=newH;minute=newM;second=newS;,18,目的对象,调用成员函数时,需用“.”操作符指定调用所针对的对象,这一对象就是本次调用的目的对象。,在成员函数中,可以直接引用目的对象的所有数据成员,而无需使用“.”操作符。,在成员函数中,引用其它对象的数据成员和函数成员时,必须使用“.”操作符。,在类的成员函数中,既可以访问目的对象的私有成员,也可以访问当前类的其它对象的私有成员。,19,默认形参值,与普通函数一样,成员函数也可以带默认形参值。,注:成员函数的默认形参值只能在类的定义中设置,不能在类定义之外的函数定义中设置。,带默认形参值的成员函数,classClockpublic:voidsetTime(intNewH=0,intNewM=0,intNewS=0);.;,20,内联成员函数,内联成员函数的定义:隐式方式和显式方式,隐式方式:将函数体直接放在类的定义中,classClockpublic:voidsetTime(intNewH=0,intNewM=0,intNewS=0);voidshowTime()couthour“:”minute“:”secondendl;.;,21,内联成员函数,使用内联函数可以减少调用开销,提高效率,但只适合相当简单的函数;使用显式方式定义内联函数可以保持类定义的简洁,内联成员函数的定义:隐式方式和显式方式,显式方式:将函数体直接放在类的定义中,classClockpublic:voidsetTime(intNewH=0,intNewM=0,intNewS=0);voidshowTime();.;inlinevoidClock:showTime()couthour“:”minute“:”secondendl;,22,程序示例,#includeusingnamespacestd;classClock/时钟类的声明public:/外部接口,公有成员函数voidsetTime(intNewH=0,intNewM=0,intNewS=0);voidshowTime();private:/私有数据成员inthour,minute,second;/成员函数的定义(时钟类成员函数的具体实现)voidClock:setTime(intNewH,intNewM,intNewS)hour=NewH;minute=NewM;second=NewS;inlinevoidClock:showTime()couthour:minute:secondendl;,23,/主函数intmain()ClockmyClock;/定义对象myClockcoutFirsttime:endl;myClock.setTime();/设置时间为默认值myClock.showTime();/显示时间coutSecondtime:endl;myClock.setTime(16,10,28);/设置时间为16:10:28myClock.showTime();/显示时间system(pause);return0;,程序示例,ex_class_01.cpp,24,主要内容,面向对象的基本特点类和对象构造函数和析构函数类的组合结构体与联合体,25,构造与析构函数,构造函数:负责对象初始化,类与对象的关系类似于基本数据类型与普通变量之间的关系,不同对象之间的主要区别:名称与数据,对象的初始化:定义对象时,设置数据成员的值,析构函数:在特定对象使用结束后,经常需要进行一些清理工作,这部分工作就有析构函数负责,构造函数与析构函数是对象的两个特殊的成员函数,26,构造函数,构造函数,构造函数的函数名与类的名称相同;构造函数没有返回值;构造函数在对象创建时会被系统自动调用。若没有构造函数,编译器会自动产生出构造函数(形参和函数体都为空,如:Clock())可以是内联函数、带默认形参值或函数重载,对象创建的过程申请内存空间(只存放数据成员)初始化:调用构造函数,27,classClockpublic:Clock(intx,inty,intz);/构造函数voidsetTime(intNewH=0,intNewM=0,intNewS=0);voidshowTime();private:inthour,minute,second;/构造函数的定义Clock:Clock(intx,inty,intz)hour=x;minute=y;second=z;.,构造函数示例,构造函数前不能加数据类型或void!,28,intmainClockc1(0,0,0);/声明对象并初始化c1.showTime();c1.setTime(16,10,28);Clockc2;/ERRORreturn0;,构造函数示例,ex_class_02.cpp,29,classClockpublic:voidClock(intx,inty,intz);/构造函数voidClock()hour=0;minute=0;second=0;/函数重载voidsetTime(intNewH=0,intNewM=0,intNewS=0);voidshowTime();private:inthour,minute,second;.,构造函数示例,ex_class_03.cpp,思考:如何显示时间16:30:00,30,复制构造函数,复制构造函数:一类特殊的构造函数,用已有的对象去初始化新的对象。,若没有定义复制构造函数,系统会在必要时自动生成一个,功能就是将已有对象的数据成员全部复制到新建立的对象中。,class类名public:类名(形参列表);/构造函数类名(类名,31,示例,classPoint/Point类的声明public:/外部接口Point(intx0=0,inty0=0)x=x0;y=y0;/构造函数Point(Point.,32,复制构造函数,普通构造函数在对象建立时被自动调用,而复制构造函数在以下三种情况下会被调用:,(1)用一个对象去初始化另一个同类的对象时,intmainPointa(1,2);Pointb(a);/用a初始化b,构造函数被调用Pointc=a;/用a初始化c,构造函数被调用coutb.getx()endl;return0;,以上两种方式只是写法上不同,执行的操作完全相同,33,复制构造函数,(2)若函数的形参是类的对象,调用函数时形参与实参的结合,viodf(Pointp)coutp.getx()x;CirclePool(x);/声明Circle对象CirclePoolRim(x+3);/计算栅栏造价并输出y=PoolRim.Circum()*price1;cout栅栏造价为:yendl;/计算过道造价并输出z=(PoolRim.Area()-Pool.Area()*price2;cout过道的造价为:zendl;return0;,ex_class_05.cpp,38,主要内容,面向对象的基本特点类和对象构造函数和析构函数类的组合结构体与联合体,39,类的组合,类的组合:将已有的类的对象作为新的类的成员。,classPoint/声明Point类public:.private:intx,y;classLine/声明Line类public:.private:Pointp1,p2;,例:,40,初始化,在创建类的对象时,如果这个类包含其它类的对象(内嵌对象成员),则各个内嵌对象将首先被自动创建初始化时需要对每个内嵌对象成员进行初始化,组合类构造函数的一般形式,类名:类名(形参):内嵌对象1(形参),内嵌对象2(形参),.类的初始化,“内嵌对象1(形参),内嵌对象2(形参),.”为初始化列表,其作用是对内嵌对象进行初始化除了自身的构造函数外,内嵌对象的构造函数也被调用构造函数调用顺序:按内嵌对象在组合类的定义中出现的顺序依次调用内嵌对象的构造函数最后调用本类的构造函数析构函数的调用顺序与构造函数相反,41,前向引用声明,类必须先定义后使用若两

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论