《类和对象 》PPT课件.ppt
《《类和对象 》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《类和对象 》PPT课件.ppt(74页珍藏版)》请在三一办公上搜索。
1、作业参考程序,#include class Cheng int x,y;float a,b;public:void Input(int f)cinxy;void Input(float f)cinab;void Chengji(int f)coutx*yendl;,void Chengji(float f)couta*bendl;void main()Cheng ch;ch.Input(2);ch.Input(2.0f);ch.Chengji(1);ch.Chengji(1.0f);,C+程序设计,第2讲 类和对象,第2讲 类和对象,1.类的声明和对象的定义2.类的成员函数3.对象成员的引用4
2、.类的封装性和信息隐蔽5.类和对象的简单应用举例,1.类的声明和对象的定义,对象指客观世界中任一实际存在的事物,它既可以是有形的(比如一辆汽车、一台电脑、一个班级等),也可以是无形的(比如一项计划、一个发明等)。每个对象都具有属性和行为两个要素。属性:描述了对象的静态特征行为:描述了对象的动态特征(如功能、操作等),例如,对于班级对象,属性:所属专业、人数、男女生比例等行为:上课、下课、开会、选举班干部等活动,例如,对于摄像机对象,属性:生产厂家、型号、重量、颜色等行为:录像、放像、停止、快进、快退等功能,例如,对于一个数构成的对象,属性:值行为:各种算术运算、输出操作等,下面介绍在C+中是如
3、何利用面向对象方法编写软件的。我们结合例子来进行讲解。,例1、根据三角形的三条边长边长,计算并输出面积。(用OOP法),该系统包含一个三角形对象,设计该三角形对象,调用对象中的函数就是向该对象传送一个消息,要求该对象实施某一行为(功能)。,1.类的声明和对象的定义,流程:(1)定义一个三角形类,以描述各种三角形对象(2)定义一个具体的三角形对象(3)产生消息-输出边长(4)产生消息-计算面积,1.类的声明和对象的定义,#include#include class Triangle/定义三角形类 public:Triangle(float x,float y,float z)a=x;b=y;c=
4、z;float Area()/成员函数 float s=(a+b+c)/2;return sqrt(s*(s-a)*(s-b)*(s-c);void Printabc()/成员函数 coutabcendl;private:float a,b,c;/数据成员;,/接左边int main()Triangle triobj(3,4,5);triobj.Printabc();couttriobj.Area();return 0;,定义一个三角形对象,其边长为3、4、5,产生输出边长的消息,产生计算面积的消息,面向对象的程序设计方法,抽象性封装性继承性多态性,面向对象方法的四个特征,特征之一抽象性,所谓
5、抽象是将相关事物的共性进行归纳、集中的过程。利用抽象可把具有共同性质的事物划分为一类,并得出一个抽象的概念。,例如,把用汽油发动机驱动的车抽象为“汽车”,于是有了汽车的概念,它代表了车的一种类型;,把所有国籍为中国的人抽象为“中国人”,于是有了中国人的概念,它代表了人的一种类型;,把所有不带小数的数抽象为“整数”,于是有了整数的概念,它代表了数的一种类型即整数类型。实际上,C+中每种数据类型都是对一批具体的数的抽象。,由此不难想到,若把具有共同性质的对象进行抽象,也会得到新的数据类型,在C+中这种类型统称为类(class)。因此类是对象的抽象,对象是类的实例。,例如,一个三角形可作为一个对象,
6、10个不同尺寸的三角形是10个对象。如果这10个三角形对象有相同的属性和行为(只是边长不同),可以由它们抽象出三角形类。于是,这10个三角形就是属于同一类的对象。,特征之一抽象性,由于对象具有属性和行为两要素,因此,把对象进行抽象要做两方面的工作:数据抽象:给出对象共有的属性或状态代码抽象:给出对象共有的功能或行为特征 抽象的结果体现在相应的类定义中。,特征之二封装性,面向对象的封装有两层含义:,将对象的数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体。这样一来,各个对象之间相对独立,互不干扰,便于实现模块化。,尽可能隐蔽对象的内部细节,对外形成一个边界(或者说一道屏障),只
7、保留有限的对外接口来接收外部消息。这样一来,降低了操作对象的难度,增强信息的安全性。,特征之二封装性,如何实现封装呢?可借助C+中的类定义来实现。,class Clockprivate:int Hour,Minute,Second;public:void SetTime();void ShowTime();;,特定的边界,特定的边界,外部接口,内部信息,2.声明类类型,class 类名 public:公有成员 private:私有成员 protected:保护型成员;,下面来学习如何声明类。类也是用户自定义的数据类型,其声明格式如下:,class Clock public:void SetTi
8、me(int h,int m,int s)Hour=h;Min=m;Sec=s;void ShowTime()coutHour Min Sec;private:int Hour,Min,Sec;,class为声明类的关键字,类的声明以分号结束,类体中包括类的全体成员。既有数据,也有对它们操作的函数,体现了封装性。,数据成员,2.声明类类型,class 类名 public:公有成员 private:私有成员 protected:保护型成员;,访问权限规定了成员的访问属性。具体地说就是,私有成员:只能被本类中的成员函数引用,类外不能引用;公有成员:不仅能被本类中的成员函数引用,也能被类外的其他函数
9、引用。,class Clock public:void SetTime(int h,int m,int s)Hour=h;Min=m;Sec=s;void ShowTime()coutHour Min Sec;private:int Hour,Min,Sec;,数据成员,2.声明类类型,class A int len;/私有成员public:;,关于类的声明,再强调以下几点:,缺省访问权限为私有的,访问权限修饰符出现的次序任意,并且允许多次出现,class A private:int len;public:private:;,公有成员通常是一些成员函数,它们向用户提供接口功能,私有成员通常是一
10、些数据成员,它们用来描述对象的属性,class Clock public:void SetTime(int h,int m,int s)Hour=h;Min=m;Sec=s;void ShowTime()coutHour Min Sec;private:int Hour,Min,Sec;,在声明类时,不允许对数据成员初始化,class Clock public:void SetTime(int h,int m,int s)Hour=h;Min=m;Sec=s;void ShowTime()coutHour Min Sec;private:int Hour=15,Min=30,Sec=0;,4.
11、定义对象的方法,1.先声明类类型,然后再定义对象,class Student/声明类类型 public:void display()coutnum name sex;private:int num;char name20;char sex;Student s1,s2;/定义了两个Student类的对象,对象s1包括student类中定义的数据和函数,编译器会为该对象分配存储空间,以存放对象中的成员。,4.定义对象的方法,2.在声明类类型的同时定义对象,class Student/声明类类型 public:void display()coutnum name sex;private:int nu
12、m;char name20;char sex;s1,s2;/定义了两个Student类的对象,对象s1包括student类中定义的数据和函数,编译器会为该对象分配存储空间,以存放对象中的成员。,4.定义对象的方法,3.不出现类名,直接定义对象,class/无类名 public:void display()coutnum name sex;private:int num;char name20;char sex;s1,s2;/定义了两个无类名的对象,在C+中很少用此方法,也不提倡使用。,5.类的成员函数,类的成员函数是函数的一种,它的用法与前面学过的函数基本一致。成员函数的特别之处在于,它属于一
13、个类,且有访问权限。因此,在使用类函数时,要注意它的访问权限。例如,私有成员函数只能被本类中的其它成员函数调用,而不能被类外调用。但是,需要注意的是,成员函数可以访问本类中的任何成员。,通常将允许被外界调用的成员函数指定为public,它们是类的对外接口。对于仅供本类中其它函数调用的函数,其访问权限应指定为private。,5.1 在类外定义成员函数,在前面的例子中,成员函数是在类体中定义的。也可以在类体中只写出成员函数的声明,而在类的外面定义函数。,class Student/声明类类型 public:void display()/定义成员函数 coutnum name sex;privat
14、e:int num;char name20;char sex;,class Student/声明类类型 public:void display();/声明成员函数private:int num;char name20;char sex;void Student:display()/类外定义成员函数 coutnum name sex;,5.1 在类外定义成员函数,作用域运算符“:”功能是表明某成员属于一个类,其使用格式为::(),注意事项:在类体中直接定义函数时,不需要在函数名前面加上类名;但在类外定义成员函数时,必须在函数名前面加上类名,予以限定。如果在作用域运算符的前面没有类名,或者函数名前
15、面既无类名又无作用域运算符,如;display()或 display()则表示display函数不属于任何类,是一个普通函数。类函数必须先在类体中进行声明,然后在类外定义,即类体的位置应在函数定义之前。,5.2 inline(内联)成员函数,class Student public:void display()coutnum name sex;private:int num;string name;char sex;,注意:如果成员函数在类体外定义,系统并不把它默认为内置函数。,类的成员函数也可以指定为内置(内联)(inline)函数。1.类体中定义的成员函数自动成为内置函数,相当于inlin
16、e void display(),5.2 inline成员函数,2.把类体外定义的成员函数指定为内置函数,class Student/声明类类型 public:inline void display();/声明此成员函数为内置函数private:int num;char name20;char sex;/在类外定义成员函数为内置函数inline void Student:display()coutnum name sex;,5.2 inline成员函数,例2、定义一个描述日期的类,class Datepublic:/公有成员 void SetDate(int y,int m,int d)/给对
17、象设置日期值 year=y;month=m;day=d;int IsLeapYear()/判断是否为闰年 return(year%4=0,5.2 inline成员函数,例3、定义一个描述二维平面上点坐标的类,class Pointpublic:/公有成员 void SetPoint(int x,int y)/设置点的坐标 X=x;Y=y;int GetX()/返回点的X坐标 return X;int GetY()/返回点的X坐标 return Y;inline void Move(int xOffset,int yOffset);/改变点的坐标private:/私有成员 int X,Y;inl
18、ine void Move(int xOffset,int yOffset)/改变点的坐标X+=xOffset;Y+=yOffset;,内联函数引入的目的,解决程序中一些函数体代码不是很大,但又频繁地被调用的函数的函数调用的效率问题。,5.2 inline成员函数,解决方法,以目标代码的增加为代价来换取时间上的节省;即在编译时将函数体中的代码替换到程序中,增加目标程序代码量,进而增加空间开销,从而在时间开销上不像函数调用时那么大。,内联函数的定义方法,在函数定义的前面加上关键字inline,inline int add(int x,int y,int z)return x+y+z;,使用内联函
19、数的优点是缩短程序运行时间,提高程序执行效率。但是,它会增加程序可执行代码的长度。因此,内联函数适用于经常使用且规模很小的函数。,使用内联函数的注意事项,在内联函数内不允许用循环语句或条件语句、开关语句;因为它们有改变流程的语句,无法正确地替换。,内联函数的定义必须出现在该内联函数第一次被调用之前;内联函数定义在前,使用在后,以便编译器能够正确替换。,类结构中所有在类说明内部定义的函数都是内联函数;,内联函数无法递归调用;,内联函数具有与带参数的宏定义#define相同的作用和相似的机理,但内联函数具有宏定义的所有优点而没有其缺点,它消除了宏定义的不安全性。,内联函数和宏定义的区别,5.3 成
20、员函数的存储方式,假设用同一个类定义了8个对象,按理说,C+会为每个对象分配空间以存储对象的数据部分和函数代码。,由于这些函数代码完全相同,为节省空间起见,C+把函数代码只保存一份,供各个对象使用。,数据1,函数代码,对象1,数据2,函数代码,对象2,数据8,函数代码,对象8,因此,每个对象所占用的存储空间只是该对象的数据部分所占用空间,并不包括函数代码所占空间。,5.3 成员函数的存储方式,说明:不论成员函数在类内定义还是在类外定义,成员函数的代码段都用同一种方式存储。,5.4 对象成员的引用,对象类的对象是该类的某一特定实体,即类类型的变量。常用的对象声明形式:;例如:Student s1
21、,s2;class Time public:int Hour,Min,Sec;Time t1,t2,*pt,t10,5.4 对象成员的引用,与访问结构体的成员类似,访问对象中的成员也有3种方法:访问对象中成员的3种方法:通过对象名和成员运算符访问对象中的成员;通过指向对象的指针访问对象中的成员;通过对象的引用变量访问对象中的成员。,引用,变量引用操作符 首先定义变量a,并初始化为1,然后定义引用b,并初始化为a,即b是a的别名,因此a和b是同一个单元。注意:定义引用时一定要初始化,指明该引用变量是谁的别名。,例如:int sum,*p;int rsum是变量sum的引用,rcount是一个内部
22、临时变量的引用,该临时变量并不显式地表示出来。rp是*p的引用。,非法引用:int/数组不是单个对 象,不能定义数组引用,(2)特点:引用声明后,对引用的操作等同于对目标对象的操作。引用一旦初始化,它就维系在一个固定目标上,再也不分开。(3)引用的作用:是用来作函数的参数或函数的返回值。例如:int a=3;int,输出结果:10,10,示例:int a=3;int,8,m,定义引用并初始化,将引用赋值给变量,a=8,对引用的操作就是对被引用者的操作,5.4 对象成员的引用,对于一般对象数据成员:对象名.成员名成员函数:对象名.成员名(),例如:Student s1,s2;Time t1;t1
23、.Hour=12;/访问对象t1的公用数据成员Hours1.display();/调用对象s1的公用成员函数display();/错误,未指明是哪一个对象的display函数s1.num=99001;/错误,num是私有成员,不能被外界访问,成员运算符,8.4 对象成员的引用,对于引用对象与一般对象相同;数据成员:对象名.成员名成员函数:对象名.成员名(),例如:Student s1,/调用引用对象s2的公用成员函数,成员运算符,8.4 对象成员的引用,对于指向对象的指针数据成员:对象指针-成员名成员函数:对象指针-成员名(),例如:Student s1,*ps;Time t1,*pt=/调用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 类和对象 类和对象 PPT课件 对象 PPT 课件
链接地址:https://www.31ppt.com/p-5565918.html