《面向对象程序设计》课件第3章 类和对象.pptx
《《面向对象程序设计》课件第3章 类和对象.pptx》由会员分享,可在线阅读,更多相关《《面向对象程序设计》课件第3章 类和对象.pptx(67页珍藏版)》请在文库网上搜索。
1、第第第第3 3 3 3章章章章 类和对象类和对象类和对象类和对象3.1 类类3.2 对象对象3.3 构造函数和析构函数构造函数和析构函数3.4 类的聚集类的聚集对象成员(自学)对象成员(自学)3.5 静态成员静态成员3.7 综合举例综合举例 3.1 3.1 类类v类类类类描述了一组具有相同属性和行为特征的对象。在系统实描述了一组具有相同属性和行为特征的对象。在系统实现中,类是一种现中,类是一种共享共享机制,它提供了本类对象共享的操作机制,它提供了本类对象共享的操作实现。类是代码复用的基本单位,它可以实现抽象数据类实现。类是代码复用的基本单位,它可以实现抽象数据类型,创建对象,实现属性和行为的封
2、装型,创建对象,实现属性和行为的封装。v类是一种复杂的数据类型,它是将不同类型的数据和与这类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。些数据相关的操作封装在一起的集合体。数据结数据结构构操作1操作2操作3操作4操作5数据数据结构结构 3.1 3.1 类类v对象是类的实例对象是类的实例。类是对一组具有相同特征的对象的抽象类是对一组具有相同特征的对象的抽象描述,所有这些对象都是这个类的实例。描述,所有这些对象都是这个类的实例。v在程序设计语言中,在程序设计语言中,类是一种数据类型,而对象是该类型类是一种数据类型,而对象是该类型的变量的变量,变量名即是某个具
3、体对象的标识。,变量名即是某个具体对象的标识。v类提供了完整的解决特定问题的能力,因为类描述了类提供了完整的解决特定问题的能力,因为类描述了数据数据结构结构(对象属性)、(对象属性)、算法算法(对象行为)和(对象行为)和外部接口外部接口(消息(消息协议)。协议)。v在在C+C+语言中,一个类的定义包含语言中,一个类的定义包含数据成员和成员函数数据成员和成员函数两部两部分内容。数据成员定义该类对象的属性,不同对象的属性分内容。数据成员定义该类对象的属性,不同对象的属性值可以不同;成员函数定义了该类对象的操作即行为。值可以不同;成员函数定义了该类对象的操作即行为。v类具有对数据的类具有对数据的抽象
4、性抽象性、隐藏性隐藏性和和封装性封装性。v类对象的行为由类的内部数据结构和相关的操作确定;类对象的行为由类的内部数据结构和相关的操作确定;外部行为通过操作外部行为通过操作接口接口实现。人们关心的就是操作接口所实现。人们关心的就是操作接口所能提供的服务。能提供的服务。例例 3.1 3.1 类类The person watching TV does not need to know the TV sets structure and how it works inside.But he needs to control the TV set.TV needs to provide an inter
5、face.Internal State对象及其信息封装的例子对象及其信息封装的例子:TV开请求开请求变更频道变更频道调节声音调节声音Turn OnTurn OffChange ChannelAdjust VolumeOthers.被封装的行为和状态被封装的行为和状态关请求关请求class 类名类名private:/私有数据成员和成员函数私有数据成员和成员函数public:/公有数据成员和成员函数公有数据成员和成员函数protected:/保护的数据成员和成员函数保护的数据成员和成员函数;3.1.1 3.1.1 类的定义类的定义类由三部分组成:类名、数据成员和成员函数。类由三部分组成:类名、数据
6、成员和成员函数。类由三部分组成:类名、数据成员和成员函数。类由三部分组成:类名、数据成员和成员函数。有关类定义的几点说明:有关类定义的几点说明:(1)(1)class 是关键字,类名是一个标识符,必须符合是关键字,类名是一个标识符,必须符合C+C+标识符的命名规则。标识符的命名规则。内是类的定义体部分,说明该类的成内是类的定义体部分,说明该类的成员,类的成员包括数据成员和成员函数。员,类的成员包括数据成员和成员函数。(2)(2)类成员的三种访问控制权限类成员的三种访问控制权限:类有三种访问控制权限,分别是类有三种访问控制权限,分别是private(私有成员)、(私有成员)、public(公有成
7、员)、(公有成员)、protected(保护成员),在每一种访(保护成员),在每一种访问控制权限下,均可以定义数据成员和成员函数。问控制权限下,均可以定义数据成员和成员函数。privateprivate:私有成员是在类中被隐藏的部分,它往往是用来描述该私有成员是在类中被隐藏的部分,它往往是用来描述该类对象属性的数据成员,私有成员只能由本类的成员函数或某些特殊类对象属性的数据成员,私有成员只能由本类的成员函数或某些特殊说明的函数(如第说明的函数(如第4 4章讲到的友员函数)访问,而类的外部根本就无章讲到的友员函数)访问,而类的外部根本就无法访问。实现了法访问。实现了访问权限访问权限访问权限访问权
8、限的有效控制,有利于的有效控制,有利于数据隐藏数据隐藏数据隐藏数据隐藏,使内部数据使内部数据不能被任意的访问和修改,使数据得到不能被任意的访问和修改,使数据得到有效保护有效保护有效保护有效保护,也不会对该类以外也不会对该类以外的其余部分造成影响,使模块之间的相互作用被降低到最小的其余部分造成影响,使模块之间的相互作用被降低到最小。有关类定义的几点说明:有关类定义的几点说明:(1)(1)class 是关键字,类名是一个标识符,必须符合是关键字,类名是一个标识符,必须符合C+C+标识符的命名规则。标识符的命名规则。内是类的定义体部分,说明该类的成内是类的定义体部分,说明该类的成员,类的成员包括数据
9、成员和成员函数。员,类的成员包括数据成员和成员函数。(2)(2)类成员的三种访问控制权限类成员的三种访问控制权限:类有三种访问控制权限,分别是类有三种访问控制权限,分别是private(私有成员)、(私有成员)、public(公有成员)、(公有成员)、protected(保护成员),在每一种访(保护成员),在每一种访问控制权限下,均可以定义数据成员和成员函数。问控制权限下,均可以定义数据成员和成员函数。public:公有成员对外是完全开放的,公有成员一般是成员公有成员对外是完全开放的,公有成员一般是成员公有成员对外是完全开放的,公有成员一般是成员公有成员对外是完全开放的,公有成员一般是成员函数
10、,它提供了外部程序与类的函数,它提供了外部程序与类的函数,它提供了外部程序与类的函数,它提供了外部程序与类的接口接口接口接口功能,用户通过公有成功能,用户通过公有成功能,用户通过公有成功能,用户通过公有成员访问该类对象中的数据。员访问该类对象中的数据。员访问该类对象中的数据。员访问该类对象中的数据。OOPOOPOOPOOP的灵魂就是使用的灵魂就是使用的灵魂就是使用的灵魂就是使用private隐藏隐藏隐藏隐藏类的实现类的实现类的实现类的实现,使用使用使用使用public暴露类的接口暴露类的接口暴露类的接口暴露类的接口。有关类定义的几点说明:有关类定义的几点说明:(1)(1)class 是关键字,
11、类名是一个标识符,必须符合是关键字,类名是一个标识符,必须符合C+C+标识符的命名规则。标识符的命名规则。内是类的定义体部分,说明该类的成内是类的定义体部分,说明该类的成员,类的成员包括数据成员和成员函数。员,类的成员包括数据成员和成员函数。(2)(2)类成员的三种访问控制权限类成员的三种访问控制权限:类有三种访问控制权限,分别是类有三种访问控制权限,分别是private(私有成员)、(私有成员)、public(公有成员)、(公有成员)、protected(保护成员),在每一种访(保护成员),在每一种访问控制权限下,均可以定义数据成员和成员函数。问控制权限下,均可以定义数据成员和成员函数。pr
12、otected:只能由该类的成员函数,友元,公有派生类成只能由该类的成员函数,友元,公有派生类成只能由该类的成员函数,友元,公有派生类成只能由该类的成员函数,友元,公有派生类成员函数访问的成员。保护成员与私有成员在一般情况下含义相员函数访问的成员。保护成员与私有成员在一般情况下含义相员函数访问的成员。保护成员与私有成员在一般情况下含义相员函数访问的成员。保护成员与私有成员在一般情况下含义相同,它们的区别体现在类的继承中对产生的新类的影响不同,同,它们的区别体现在类的继承中对产生的新类的影响不同,同,它们的区别体现在类的继承中对产生的新类的影响不同,同,它们的区别体现在类的继承中对产生的新类的影
13、响不同,具体内容将在第具体内容将在第具体内容将在第具体内容将在第5 5 5 5章中介绍。章中介绍。章中介绍。章中介绍。privatepublicdata1data2function1data3data4function2function3function4Member visibilitystrangerfriend有关类定义的几点说明:有关类定义的几点说明:(3)(3)由于类的公有成员提供了一个类的接口,所以一般情由于类的公有成员提供了一个类的接口,所以一般情况下,先定义公有成员,再定义保护成员和私有成员,这样可况下,先定义公有成员,再定义保护成员和私有成员,这样可以在阅读时首先了解这个类的
14、接口。以在阅读时首先了解这个类的接口。类的设计是类的设计是以数据为中心,以数据为中心,还是还是以行为为中心?以行为为中心?class Aprivate:int i,j;float x,y;public:void func1(void);void func2(void);class Apublic:void func1(void);void func2(void);private:int i,j;float x,y;有关类定义的几点说明:有关类定义的几点说明:(4)(4)结构体结构体struct和类和类class的区别的区别 C C语言中的结构体只有数据成员,无函数成员。语言中的结构体只有数据成
15、员,无函数成员。C+C+语言中的结构体可有数据成员和函数成员。语言中的结构体可有数据成员和函数成员。在在在在缺省缺省缺省缺省情况情况情况情况下,结构体中的数据成员和成员函数都是公有的,而在类中是私下,结构体中的数据成员和成员函数都是公有的,而在类中是私下,结构体中的数据成员和成员函数都是公有的,而在类中是私下,结构体中的数据成员和成员函数都是公有的,而在类中是私有的有的有的有的。可以随意修改结构体变量中的数据,这样对数据的操作是很可以随意修改结构体变量中的数据,这样对数据的操作是很不安全的,不能通过结构体对数据进行保护和控制;在结构体中,不安全的,不能通过结构体对数据进行保护和控制;在结构体中
16、,数据和其相应的操作是分离的,使得程序的复杂性难以控制,而数据和其相应的操作是分离的,使得程序的复杂性难以控制,而且程序的可重用性不好,严重影响了软件的生产效率。且程序的可重用性不好,严重影响了软件的生产效率。所以,一般我们所以,一般我们仅在描述数据成员时仅在描述数据成员时仅在描述数据成员时仅在描述数据成员时使用使用结构体结构体结构体结构体,当,当既有数既有数既有数既有数据成员又有成员函数时据成员又有成员函数时据成员又有成员函数时据成员又有成员函数时使用使用类类类类。class Tdate /定义日期类定义日期类public:/定义公有成员函数定义公有成员函数 void Set(int m,i
17、nt d,int y);/置日期值置日期值 int isLeapYear();/判是否闰年判是否闰年 void Print();/输出日期值输出日期值private:/定义私有数据成员定义私有数据成员 int month;int day;int year;/类定义体的结束类定义体的结束有关类定义的几点说明:有关类定义的几点说明:(5)(5)类定义举例类定义举例3.1.2 3.1.2 类中成员函数的定义类中成员函数的定义 成员函数是程序算法实现的部分,是对封装的数据进行操成员函数是程序算法实现的部分,是对封装的数据进行操作的唯一途径。作的唯一途径。类的成员函数有两种定义方法:外联定义和内联定义。
18、类的成员函数有两种定义方法:外联定义和内联定义。1.1.外联函数外联函数 外联函数是指在类定义体中外联函数是指在类定义体中声明声明成员函数,而在类外成员函数,而在类外定义定义成员函数。成员函数。作用域区分符作用域区分符 :指明一个成员函数或数据成员所在指明一个成员函数或数据成员所在的类。的类。:前若不跟类名,则成为全局数据或全局函数前若不跟类名,则成为全局数据或全局函数(非成员函数非成员函数)。class Tdate public:void Set(int m,int d,int y);int isLeapYear();void Print();private:int month;int da
19、y;int year;void Tdate:Set(int m,int d,int y)month=m;day=d;year=y;int Tdate:IsLeapYear()return(year%4=0&year%100!=0)|(year%400=0);void Tdate:Print()coutmonth/day /year公有成员公有成员或或 (*对象指针名对象指针名).公有成员公有成员(3)通过对象的引用调用成员通过对象的引用调用成员格式:对象的引用格式:对象的引用.公有成员公有成员 Tdate s;Tdate s;Tdate *pTate=&s;Tdate *pTate=&s;s.
20、Set(2,15,1998);s.Set(2,15,1998);pTdate-print();pTdate-print();(*pTdate).print();(*pTdate).print();定义时钟类:定义时钟类:定义时钟类:定义时钟类:class Myclock private:int hour,minute,second;public:void init();void updata();void display();Myclock clock,*pclock;/定义对象clock和指向Myclock类对象的指针pclockclock.init();/通过对象访问公有成员函数通过对象访
21、问公有成员函数pclock=&clock;/指针指针pclockpclock指向对象指向对象clockclockpclock-display();/通过指针访问成员函数通过指针访问成员函数clock.hour=4;/错误,因为对象不能访问其私有成员错误,因为对象不能访问其私有成员clock.hour=4;错误,因为对象不能访问其私有成员错误,因为对象不能访问其私有成员(1)(1)(1)(1)名字解析名字解析名字解析名字解析在调用成员函数时,通常使用缩写形式,如上例中的语句在调用成员函数时,通常使用缩写形式,如上例中的语句s.set(2,15,1998);s.set(2,15,1998);就是就
22、是s.s.Tdate:Tdate:set(2,15,1998);set(2,15,1998);的缩写,因的缩写,因此可以定义两个或多个类的具有相同名字的成员而不会产生二义此可以定义两个或多个类的具有相同名字的成员而不会产生二义性。性。(2)this(2)this(2)this(2)this指针指针指针指针当一个成员函数被调用时,系统自动向它传递一个隐含的参当一个成员函数被调用时,系统自动向它传递一个隐含的参数,该参数是一个数,该参数是一个指向接受该函数调用的对象的指针指向接受该函数调用的对象的指针指向接受该函数调用的对象的指针指向接受该函数调用的对象的指针,在程序中,在程序中可以使用关键字可以
23、使用关键字thisthis来引用该指针,因此称该指针为来引用该指针,因此称该指针为thisthis指针。指针。thisthisthisthis指针是指针是指针是指针是C+C+C+C+实现封装的一种机制实现封装的一种机制实现封装的一种机制实现封装的一种机制,它将成员和用于操作这些,它将成员和用于操作这些成员的成员函数连接在一起。成员的成员函数连接在一起。3.2.4 3.2.4 名字解析和this指针void Tdate:set(int m,int d,int y)/置日期值置日期值 month=m;day=d;year=y;void Tdate:set(int m,int d,int y)/置日
24、期值置日期值 this-month=m;this-day=d;this-year=y;使用this指针,保证了每个对象可以拥有不同的数据成员,但处理这些数据成员的代码可以被所有的对象共享。thisthis指针指针同普通函数一样,类的成员函数也可以是带缺省同普通函数一样,类的成员函数也可以是带缺省值的函数,其调用规则同普通函数。成员函数也可以值的函数,其调用规则同普通函数。成员函数也可以是重载函数,类的成员函数的重载与全局函数的重载是重载函数,类的成员函数的重载与全局函数的重载方法相同。方法相同。【例例3.4】带缺省参数的成员函数。带缺省参数的成员函数。【例例3.5】重载成员函数。重载成员函数。
25、3.2.5 3.2.5 带缺省参数的成员函数和重载成员函数带缺省参数的成员函数和重载成员函数C+程序的多文件结构与模块化类程序的多文件结构与模块化类一般情况下,一般情况下,一般情况下,一般情况下,模块化类模块化类模块化类模块化类的的的的组成:组成:组成:组成:规范说明规范说明规范说明规范说明部分:描述一个模块与其它模块的接口,常常作为头文部分:描述一个模块与其它模块的接口,常常作为头文部分:描述一个模块与其它模块的接口,常常作为头文部分:描述一个模块与其它模块的接口,常常作为头文件存放,扩展名为件存放,扩展名为件存放,扩展名为件存放,扩展名为”.h”;”.h”;实现实现实现实现部分:则是模块的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象程序设计 面向对象程序设计课件第3章 类和对象 面向 对象 程序设计 课件