面向对象编程(C )---类和对象.ppt_第1页
面向对象编程(C )---类和对象.ppt_第2页
面向对象编程(C )---类和对象.ppt_第3页
面向对象编程(C )---类和对象.ppt_第4页
面向对象编程(C )---类和对象.ppt_第5页
免费预览已结束,剩余27页可下载查看

下载本文档

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

文档简介

面向对象编程(C+),第2章类和对象,2.1面向对象程序设计方法概述2.2类的声明和对象的定义2.3类的成员函数2.4对象成员的引用,2.1面向对象程序设计方法概述,抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。先注意问题的本质及描述,其次是实现过程或细节。数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。代码抽象:描述某类对象的共有的行为特征或具有的功能。抽象的实现:通过类的声明。,2.1面向对象程序设计方法概述,抽象实例钟表数据抽象:intHour,intMinute,intSecond代码抽象:SetTime(),ShowTime(),classClockpublic:voidSetTime(intNewH,intNewM,intNewS);voidShowTime();private:intHour,Minute,Second;,钟表类,2.1面向对象程序设计方法概述,封装:将抽象出的数据成员、代码成员相结合,将它们视为一个整体。目的是曾强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。实现封装:类声明中的,2.1面向对象程序设计方法概述,继承与派生是C+中支持层次分类的一种机制,允许程序员在保持原有类特性的基础上,进行更具体的说明。,2.1面向对象程序设计方法概述,多态:同一名称,不同的功能实现方式目的:达到行为标识统一,减少程序中标识符的个数。实现:重载函数和虚函数,2.2类的声明和对象的定义,classAintx,y;public:A(inta)x=a;cout“1n”;A(inta,intb)x=a,y=b;cout“2n”;Aa1(3);voidf(void)Ab(2,3);voidmain(void)Aa2(4,5);f();f();,1222,2.2类的声明和对象的定义,类的定义类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的运算封装在一起的集合体。类将一些数据及与数据相关的函数封装在一起,使类中的数据得到很好的“保护”。在大型程序中不会被随意修改。,类的定义格式:class类名private:成员数据;成员函数;public:成员数据;成员函数;protected:成员数据;成员函数;;,关键字,类名,私有,公有,保护,classStudentprivate:charName20;floatMath;floatChiese;public:floataverage;voidSetName(char*name);voidSetMath(floatmath);voidSetChinese(floatch);floatGetAverage(void);,分号不能少,2.2类的声明和对象的定义,2.2类的声明和对象的定义,priviate限定的成员称为私有成员,私有成员只能在该类的内部使用,即私有成员数据只允许该类中成员函数使用,私有成员函数只能被该类内的成员函数调用;类就相当于私有成员的作用域。public限定的成员称为公有成员,公有成员的数据或函数不受类的限制,可以在类内或类外自由使用;对类而言是透明的。protected限定的成员称为保护成员,只允许在类内及该类的派生类中使用保护的数据或函数。即保护成员的作用域是该类及该类的派生类。,2.2类的声明和对象的定义,每一个限制词(private等)在类体中可使用多次。一旦使用了限制词,该限制词一直有效,直到下一个限制词开始为止。如果未加说明,类中成员默认的访问权限是private,即私有的。,2.2类的声明和对象的定义,classAfloatx,y;public:voidSetxy(floata,floatb)x=a;y=b;voidPrint(void)coutxtyendl;,在类外不能直接使用x或y,必须通过Setxy()给x或y赋值,通过Print()输出x或y。,A,私有数据,公有函数,2.2类的声明和对象的定义,在定义一个类时,要注意如下几点:1、类具有封装性,并且类只是定义了一种结构(样板),所以类中的任何成员数据均不能使用关键字extern,register限定其存储类型。2、在定义类时,只是定义了一种导出的数据类型,并不为类分配存储空间,所以,在定义类中的数据成员时,不能对其初始化。,如:classTestintx=5,y=6;/是不允许的externfloatx;/是不允许的,2.2类的声明和对象的定义,对象只有在定义了属于类的变量后,系统才会为类的变量分配空间。对象是类的实例,定义对象之前,一定要先说明该对象的类。,类的变量我们称之为对象。,2.2类的声明和对象的定义,不同对象占据内存中的不同区域,它们所保存的数据各不相同,但对成员数据进行操作的成员函数的程序代码均是一样的。对象的定义格式:类名对象名1,对象名2,;class类名对象名1,对象名2,;,例Studentst1,st2;,类名,对象名,在建立对象时,只为对象分配用于保存数据成员的内存空间,而成员函数的代码为该类的每一个对象所共享。,2.2类的声明和对象的定义,对象的定义方法同结构体定义变量的方法一样,也分三种,当类中有数据成员的访问权限为私有时,不允许对对象进行初始化。,classAfloatx,y;public:voidSetxy(floata,floatb)x=a;y=b;voidPrint(void)coutxtyendl;a1,a2;,voidmain(void)Aa3,a4;,定义全局对象,定义局部对象,2.2类的声明和对象的定义,对象的使用一个对象的成员就是该对象的类所定义的成员,有成员数据和成员函数,引用时同结构体变量类似,用“.”运算符。,2.2类的声明和对象的定义,classAfloatx,y;public:floatm,n;voidSetxy(floata,floatb)x=a;y=b;voidPrint(void)coutxtyendl;,voidmain(void)Aa1,a2;/定义对象a1.m=10;a1.n=20;/为公有成员数据赋值a1.Setxy(2.0,5.0);/为私有成员数据赋值a1.Print();,输出:25,2.2类的声明和对象的定义,classAfloatx,y;public:floatm,n;voidSetxy(floata,floatb)x=a;y=b;voidPrint(void)coutxtyendl;,voidmain(void)Aa1,a2;a1.m=10;a1.n=20;/为公有成员数据赋值a1.x=2;a1.y=5;a1.Setxy(2.0,5.0);a1.Print();,必须通过类内公有函数访问私有数据成员,非法,私有成员不能在类外访问,2.3类的成员函数,成员函数的性质:与普通函数相同:返回值和函数类型;不同:属于一个类的成员,出现在类体中。注意成员函数的权限(它能否被调用)、作用域(函数能使用什么范围中的数据和函数)。声明为private的私有成员函数不能被类外界调用,为本类中其他成员函数提供服务,是其他函数的工具函数。,2.3类的成员函数,在类外定义成员函数:1.成员函数可以在类体中只声明,在类体外进行函数定义。2.类体外定义函数时,函数名前加上类名和“:”(作用域限定符或作用域运算符)。3.好处:减少类体的长度,使类体清晰,便于阅读;把类的接口和实现细节相分离。,2.3类的成员函数,classStudentpublic:voiddisplay();/成员函数声明private:intnum;stringname;charsex;voidStudent:display()/类体外成员函数定义cout“num:”numendl;cout“name:”nameendl;cout“sex:”sexendl;Studentstud1,stud2;,类名,域运算符,2.3类的成员函数,classAfloatx,y;public:voidSetxy(floata,floatb)x=a;y=b;voidPrint(void)coutxtyendl;,在类体内定义成员函数,成员函数与成员数据的定义不分先后,可以先说明函数原型,再在类体外定义函数体。,2.3类的成员函数,2.3类的成员函数,在类体外定义成员函数的格式:,:()./函数体,voidA:Setxy(floata,floatb)x=a;y=b;,函数类型,类名,函数名,形参列表,函数体,2.3类的成员函数,内联成员函数当我们定义一个类时,可以在类中直接定义函数体。这时成员函数在编译时是作为内联函数来实现的。同时,我们也可以在类体外定义类的内联成员函数,在类体内说明函数,在类体外定义时,在成员函数的定义前面加上关键字inline。,2.3类的成员函数,classAfloatx,y;public:voidSetxy(floata,floatb);voidPrint(void);;,inlinevoidA:Setxy(floata,floatb)x=a;y=b;inlinevoidA:Print(void)coutxtyendl;,说明该成员函数为内联,2.4对象成员的引用,类的对象如何引用私有数据成员1、通过公有函数为私有成员赋值,classTtesintx,y;public:voidSetxy(inta,intb)x=a;y=b;voidPrintxy(void)coutx=xty=yendl;voidmain(void)Testp1,p2;p1.Setxy(3,5);p1.Printxy();,调用公有函数为私有对象赋值,2.4对象成员的引用,classTestintx,y;public:voidSetxy(inta,intb)x=a;y=b;voidGetxy(int*px,int*py)*px=x;*py=y;/提取x,y值voidPrintxy(void)coutx=xty=yendl;voidmain(void)Testp1,p2;p1.Setxy(3,5);inta,b;p1.Getxy(,输出:35,2.4对象成员的引用,3、利用函数访问私有数据成员,classTestintx,y;public:voidSetxy(inta,intb)x=a;y=b;intGetx(void)returnx;/返回x值intGety(void)returny;/返回y值voidPr

温馨提示

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

评论

0/150

提交评论