《面向对象编程类和对象精选课件.ppt》由会员分享,可在线阅读,更多相关《面向对象编程类和对象精选课件.ppt(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、关于面向对象编程类和对象第一页,本课件共有32页第2章 类和对象2.1 面向对象程序设计方法概述2.2 类的声明和对象的定义2.3 类的成员函数2.4 对象成员的引用第二页,本课件共有32页2.1 面向对象程序设计方法概述抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。先注意问题的本质及描述,其次是实现过程或细节。数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。代码抽象:描述某类对象的共有的行为特征或具有的功能。抽象的实现:通过类的声明。第三页,本课件共有32页2.1 面向对象程序设计方法概述抽象实例钟表数据抽象:int Hour,int Minute,
2、int Second代码抽象:SetTime(),ShowTime()class Clock public:void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second;钟表类钟表类第四页,本课件共有32页2.1 面向对象程序设计方法概述封装:将抽象出的数据成员、代码成员相结合,将它们视为一个整体。目的是曾强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。实现封装:类声明中的第五页,本课件共有32页2.1 面向对象程序设计方法
3、概述继承与派生是C+中支持层次分类的一种机制,允许程序员在保持原有类特性的基础上,进行更具体的说明。第六页,本课件共有32页2.1 面向对象程序设计方法概述多态:同一名称,不同的功能实现方式目的:达到行为标识统一,减少程序中标识符的个数。实现:重载函数和虚函数第七页,本课件共有32页2.2 类的声明和对象的定义class A int x,y;public:A(int a)x=a;cout“1n”;A(int a,int b)x=a,y=b;cout“2n”;A a1(3);void f(void)A b(2,3);void main(void)A a2(4,5);f();f();1222第八页
4、,本课件共有32页2.2 类的声明和对象的定义类的定义类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的运算封装在一起的 集合体。类将一些数据及与数据相关的函数封装在一起,使类中的数据得到很好的“保护”。在大型程序中不会被随意修改。第九页,本课件共有32页类的定义格式:class 类名 private:成员数据;成员函数;public:成员数据;成员函数;protected:成员数据;成员函数;;关键字类名私有公有保护class Student private:char Name20;float Math;float Chiese;public:float average;void
5、 SetName(char*name);void SetMath(float math);void SetChinese(float ch);float GetAverage(void);分号不能少2.2 类的声明和对象的定义第十页,本课件共有32页2.2 类的声明和对象的定义priviate限定的成员称为私有成员,私有成员只能在该类的内部使用,即私有成员数据只允许该类中成员函数使用,私有成员函数只能被该类内的成员函数调用;类就相当于私有成员的作用域。public限定的成员称为公有成员,公有成员的数据或函数不受类的限制,可以在类内或类外自由使用;对类而言是透明的。protected限定的成员称
6、为保护成员,只允许在类内及该类的派生类中使用保护的数据或函数。即保护成员的作用域是该类及该类的派生类。第十一页,本课件共有32页2.2 类的声明和对象的定义每一个限制词(private等)在类体中可使用多次。一旦使用了限制词,该限制词一直有效,直到下一个限制词开始为止。如果未加说明,类中成员默认的访问权限是private,即私有的。第十二页,本课件共有32页2.2 类的声明和对象的定义class A float x,y;public:void Setxy(float a,float b)x=a;y=b;void Print(void)coutxtyendl;在类外不能直接使用 x 或 y,必须
7、通过Setxy()给 x 或 y 赋值,通过Print()输出 x 或 y。xySetxy()Print()A私有数据公有函数第十三页,本课件共有32页2.2 类的声明和对象的定义在定义一个类时,要注意如下几点:1、类具有封装性,并且类只是定义了一种结构(样板),所以类中的任何成员数据均不能使用关键字extern,register限定其存储类型。2、在定义类时,只是定义了一种导出的数据类型,并不为类分配存储空间,所以,在定义类中的数据成员时,不能对其初始化。如:class Test int x=5,y=6;/是不允许的 extern float x;/是不允许的 第十四页,本课件共有32页2.
8、2 类的声明和对象的定义对象 只有在定义了属于类的变量后,系统才会为类的变量分配空间。对象是类的实例,定义对象之前,一定要先说明该对象的类。类的变量我们称之为对象。第十五页,本课件共有32页2.2 类的声明和对象的定义不同对象占据内存中的不同区域,它们所保存的数据各不相同,但对成员数据进行操作的成员函数的程序代码均是一样的。对象的定义格式:类名 对象名1,对象名2,;class 类名 对象名1,对象名2,;例 Student st1,st2;类名对象名在建立对象时,只为对象分配用于保存数据成员的内存空间,而成员函数的代码为该类的每一个对象所共享。第十六页,本课件共有32页2.2 类的声明和对象
9、的定义对象的定义方法同结构体定义变量的方法一样,也分三种,当类中有数据成员的访问权限为私有时,不允许对对象进行初始化。class A float x,y;public:void Setxy(float a,float b )x=a;y=b;void Print(void)coutxtyendl;a1,a2;void main(void)A a3,a4;定义全局对象定义局部对象第十七页,本课件共有32页2.2 类的声明和对象的定义对象的使用一个对象的成员就是该对象的类所定义的成员,有成员数据和成员函数,引用时同结构体变量类似,用“.”运算符。第十八页,本课件共有32页2.2 类的声明和对象的定义
10、class A float x,y;public:float m,n;void Setxy(float a,float b )x=a;y=b;void Print(void)coutxtyendl;void main(void)A a1,a2;/定义对象 a1.m=10;a1.n=20;/为公有成员数据赋值 a1.Setxy(2.0,5.0);/为私有成员数据赋值 a1.Print();输出:2 5第十九页,本课件共有32页2.2 类的声明和对象的定义class A float x,y;public:float m,n;void Setxy(float a,float b )x=a;y=b;v
11、oid Print(void)coutxtyendl;void main(void)A a1,a2;a1.m=10;a1.n=20;/为公有成员数据赋值 a1.x=2;a1.y=5;a1.Setxy(2.0,5.0);a1.Print();必须通过类内公有函数访问私有数必须通过类内公有函数访问私有数据成员据成员非法,私有成员不能非法,私有成员不能在类外访问在类外访问第二十页,本课件共有32页2.3 类的成员函数成员函数的性质:与普通函数相同:返回值和函数类型;不同:属于一个类的成员,出现在类体中。注意成员函数的权限(它能否被调用)、作用域(函数能使用什么范围中的数据和函数)。声明为privat
12、e的私有成员函数不能被类外界调用,为本类中其他成员函数提供服务,是其他函数的工具函数。第二十一页,本课件共有32页2.3 类的成员函数在类外定义成员函数:1.成员函数可以在类体中只声明,在类体外进行函数定义。2.类体外定义函数时,函数名前加上类名和“:”(作用域限定符或作用域运算符)。3.好处:减少类体的长度,使类体清晰,便于阅读;把类的接口和实现细节相分离。第二十二页,本课件共有32页2.3 类的成员函数class Studentpublic:void display();/成员函数声明private:int num;string name;char sex;void Student:dis
13、play()/类体外成员函数定义 cout“num:”numendl;cout“name:”nameendl;cout“sex:”sexendl;Student stud1,stud2;类名域运算符第二十三页,本课件共有32页2.3 类的成员函数class A float x,y;public:void Setxy(float a,float b)x=a;y=b;void Print(void)coutxtyendl;在类体内定在类体内定义成员函数义成员函数成员函数与成员数据的定义不分先后,可以先说明函数原型,再在类体外定义函数体。第二十四页,本课件共有32页2.3 类的成员函数class A
14、 float x,y;public:void Setxy(float a,float b);void Print(void);;void A:Setxy(float a,float b)x=a;y=b;void A:Print(void)coutxtyendl;在类体内说明成在类体内说明成员函数原型员函数原型在类体外定义在类体外定义成员函数成员函数第二十五页,本课件共有32页2.3 类的成员函数在类体外定义成员函数的格式::()./函数体函数体void A:Setxy(float a,float b)x=a;y=b;函数类型类名函数名形参列表函数体第二十六页,本课件共有32页2.3 类的成员函
15、数内联成员函数当我们定义一个类时,可以在类中直接定义函数体。这时成员函数在编译时是作为内联函数来实现的。同时,我们也可以在类体外定义类的内联成员函数,在类体内说明函数,在类体外定义时,在成员函数的定义前面加上关键字inline。第二十七页,本课件共有32页2.3 类的成员函数class A float x,y;public:void Setxy(float a,float b);void Print(void);;inline void A:Setxy(float a,float b)x=a;y=b;inline void A:Print(void)coutxtyendl;说明该成员函数为内联
16、第二十八页,本课件共有32页2.4 对象成员的引用类的对象如何引用私有数据成员1、通过公有函数为私有成员赋值class Ttesint x,y;public:void Setxy(int a,int b)x=a;y=b;void Printxy(void)coutx=xty=yendl;void main(void)Test p1,p2;p1.Setxy(3,5);p1.Printxy();调用公有函数为私有对象赋值第二十九页,本课件共有32页2.4 对象成员的引用class Test int x,y;public:void Setxy(int a,int b)x=a;y=b;void Get
17、xy(int *px,int*py)*px=x;*py=y;/提取x,y值 void Printxy(void)coutx=xty=yendl;void main(void)Test p1,p2;p1.Setxy(3,5);int a,b;p1.Getxy(&a,&b);/将 a=x,b=y coutatbendl;输出:输出:3 5第三十页,本课件共有32页2.4 对象成员的引用3、利用函数访问私有数据成员class Test int x,y;public:void Setxy(int a,int b)x=a;y=b;int Getx(void)return x;/返回x值 int Gety(void)return y;/返回y值 void Printxy(void)coutx=xty=yendl;void main(void)Test p1,p2;p1.Setxy(3,5);int a,b;a=p1.Getx();b=p1.Gety();/将 a=x,b=y coutatbendl;函数值就是私有成员变量的值第三十一页,本课件共有32页感感谢谢大大家家观观看看第三十二页,本课件共有32页
限制150内