面向对象程序设计之类与对象PPT课件.ppt

上传人:石*** 文档编号:44674895 上传时间:2022-09-22 格式:PPT 页数:56 大小:848KB
返回 下载 相关 举报
面向对象程序设计之类与对象PPT课件.ppt_第1页
第1页 / 共56页
面向对象程序设计之类与对象PPT课件.ppt_第2页
第2页 / 共56页
点击查看更多>>
资源描述

《面向对象程序设计之类与对象PPT课件.ppt》由会员分享,可在线阅读,更多相关《面向对象程序设计之类与对象PPT课件.ppt(56页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、关于面向对象程序关于面向对象程序设计之类和对象设计之类和对象第一张,PPT共五十六页,创作于2022年6月C+2-2 2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是面向对象的程序设计什么是面向对象的程序设计?面向对象的程序设计面向对象的程序设计(Object-Oriented Programming)和传统的结构化程序设计的思路完全不同。和传统的结构化程序设计的思路完全不同。面向对象的程序设计和人们面向对象的程序设计和人们日常生活解决问题日常生活解决问题的思路是相似的。的思路是相似的。比如,我们生产汽车时,不是顺序制造发动机,在设计制造底盘、车比如,我们生产汽车时,不是顺序制

2、造发动机,在设计制造底盘、车身、轮子。而是分别设计制造发动机、底盘、车身和轮子,最后组身、轮子。而是分别设计制造发动机、底盘、车身和轮子,最后组装在一起。组装时,各部件之间有联系,以便协调工作。例如,司装在一起。组装时,各部件之间有联系,以便协调工作。例如,司机踩油门,就能调节油路,控制发动机的转速,就能驱动车轮。机踩油门,就能调节油路,控制发动机的转速,就能驱动车轮。第二张,PPT共五十六页,创作于2022年6月C+2-3 2.1 面向对象程序设计方法概述面向对象程序设计方法概述程序设计者的程序设计者的任务有两个任务有两个:一是设计所需要的类和对象,即确定那些数据和操作:一是设计所需要的类和

3、对象,即确定那些数据和操作封装封装在一起;在一起;(类设计者、核心模块产品提供商类设计者、核心模块产品提供商)二是考虑怎样向有关对象发送二是考虑怎样向有关对象发送消息消息,以启动相关对象的操作。,以启动相关对象的操作。(主程序设计者,外包程序,面向用户的公司)(主程序设计者,外包程序,面向用户的公司)编程者如同一个总调度,不断地向各个对象发出命令,让这些对象活动起编程者如同一个总调度,不断地向各个对象发出命令,让这些对象活动起来,完成指定的工作。来,完成指定的工作。这就是面向对象的程序设计的基本思路。这就是面向对象的程序设计的基本思路。第三张,PPT共五十六页,创作于2022年6月C+2-4

4、2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是对象什么是对象(object)?一个对象由一组一个对象由一组“属性属性”和一组和一组“行为行为”构成。并根据外界给它的消息进构成。并根据外界给它的消息进行相应的操作。系统中多个对象通过一定的渠道相互联系。行相应的操作。系统中多个对象通过一定的渠道相互联系。任何任何事物事物都可以看成一个对象。可以是自然物体,也可以是逻辑结构。都可以看成一个对象。可以是自然物体,也可以是逻辑结构。例:例:一个班级作为对象一个班级作为对象一个班级作为对象,有两个要素:一是班级的静态特征,如班级所属的专业一个班级作为对象,有两个要素:一是班级的静态特征,

5、如班级所属的专业,学生人数、班主任姓名等,这种静态特征称为,学生人数、班主任姓名等,这种静态特征称为“属性属性”;另一个是班级;另一个是班级的动态特征,如上课,体育比赛,开会等,称为的动态特征,如上课,体育比赛,开会等,称为“行为行为”。外界向班级发。外界向班级发一个信息(如上课铃声,广播通知),我们称之为一个信息(如上课铃声,广播通知),我们称之为“消息消息”,班级就会发,班级就会发生一个操作(要么上课,要么开会)生一个操作(要么上课,要么开会)第四张,PPT共五十六页,创作于2022年6月C+2-5 2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是什么是C+对象?对象?C+

6、中,每个对象都由若干中,每个对象都由若干数据(属性)数据(属性)和若干和若干函数(操作行为)函数(操作行为)组成。数据就是对象的组成。数据就是对象的“属性属性”,函数就是用来对数据进行的,函数就是用来对数据进行的“操作操作”,以便实现某种功能。这种操作就是对象的,以便实现某种功能。这种操作就是对象的“行为行为”,也,也叫叫“方法方法”。我们点击一下鼠标,按动键盘的一个按钮,就是给某个对象一个消息我们点击一下鼠标,按动键盘的一个按钮,就是给某个对象一个消息,系统回调用该对象中的函数进行操作。,系统回调用该对象中的函数进行操作。比如长方形对象,其长和宽就是它的属性,调用该对象的一些函比如长方形对象

7、,其长和宽就是它的属性,调用该对象的一些函数,即向该对象传送一些消息,可以用来对其长、宽值进行加工数,即向该对象传送一些消息,可以用来对其长、宽值进行加工计算,以实现求出面积、周长等功能。计算,以实现求出面积、周长等功能。第五张,PPT共五十六页,创作于2022年6月C+2-6 2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是对象封装什么是对象封装(encapsulation)?就是把对象的不想让外界知道的属性和功能屏蔽起来,让外界看不见。封就是把对象的不想让外界知道的属性和功能屏蔽起来,让外界看不见。封装有两个含义,装有两个含义,一是将有关的数据和操作函数封装成一个基本单位,

8、即对象内。各对象之一是将有关的数据和操作函数封装成一个基本单位,即对象内。各对象之间间相互独立,互不干扰相互独立,互不干扰;二是将对象中的部分属性或功能二是将对象中的部分属性或功能对外隐蔽对外隐蔽,只留少数接口向外公布,以接,只留少数接口向外公布,以接收外界信息。收外界信息。对象封装的好处在于,降低了人们操作对象的复杂程度。使用对象的人,不对象封装的好处在于,降低了人们操作对象的复杂程度。使用对象的人,不必知道对象内部的实现细节,只需要了解外部功能就可以自如地操作该对必知道对象内部的实现细节,只需要了解外部功能就可以自如地操作该对象。象。对象的行为由类的内部数据结构和相关的操作确定;外部行为通

9、过操作接对象的行为由类的内部数据结构和相关的操作确定;外部行为通过操作接口实现。人们关心的就是操作接口(函数名)所能提供的服务。口实现。人们关心的就是操作接口(函数名)所能提供的服务。第六张,PPT共五十六页,创作于2022年6月C+2-7 2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是抽象什么是抽象(abstraction)?将具有相同特性的事物归纳、集中成一个统一类型,称为将具有相同特性的事物归纳、集中成一个统一类型,称为抽象抽象。比如,把张三,李四,王五归纳为一类,我们称之为。比如,把张三,李四,王五归纳为一类,我们称之为“人人”。抽象的作用,是表示同类事物的抽象的作用

10、,是表示同类事物的本质本质。C和和C+中,中,数据类型数据类型就是对一批具体数据的抽象,整形数据就是所有整数的抽象。就是对一批具体数据的抽象,整形数据就是所有整数的抽象。“类类”是是“对象对象”的抽象,的抽象,“对象对象”则是类的则是类的“特例特例”,或,或“具体表现形式具体表现形式”。第七张,PPT共五十六页,创作于2022年6月C+2-8 2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是继承什么是继承(inherit)?B类在类在A类的基础上增加了少量内容。我们显然不必重新设计一个新类类的基础上增加了少量内容。我们显然不必重新设计一个新类B,只需要把,只需要把A类拿过来,在

11、此基础上添加新内容就可以了。这就是面向对象程序设计的类拿过来,在此基础上添加新内容就可以了。这就是面向对象程序设计的继承机制继承机制。C+提供继承机制,大大节省了编程工作量,这就是所谓提供继承机制,大大节省了编程工作量,这就是所谓“软件重用软件重用(software reusability)”的思想。对于大型软件的开发具有重要意义。的思想。对于大型软件的开发具有重要意义。第八张,PPT共五十六页,创作于2022年6月C+2-9 2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是多态性什么是多态性(polymorphism)?如果有几个如果有几个相似而不同相似而不同的对象,人们往往

12、要求在向它们发出的对象,人们往往要求在向它们发出同一个消息同一个消息时,各自作出时,各自作出不同的操作不同的操作,这种情况就是,这种情况就是“多态现象多态现象”。C+中,所谓多态性是指,由中,所谓多态性是指,由继承而产生继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。的相关的不同的类,其对象对同一消息会作出不同的响应。显然,多态性能增加程序的灵活性,它是面向对象程序设计的重要特显然,多态性能增加程序的灵活性,它是面向对象程序设计的重要特征。征。第九张,PPT共五十六页,创作于2022年6月C+2-10 2.1 面向对象程序设计方法概述面向对象程序设计方法概述l类与对象的作用类与对

13、象的作用C+全面支持传统的面向过程的程序设计(即结构化编程)全面支持传统的面向过程的程序设计(即结构化编程),也支持基于对象和面向对象的程序设计。,也支持基于对象和面向对象的程序设计。所谓所谓基于基于对象,是指程序是以类和对象为基础,程序的操作是围绕对象进行的。对象,是指程序是以类和对象为基础,程序的操作是围绕对象进行的。所谓所谓面向面向对象,是指,在基于对象的基础上,利用了继承机制和多态性。对象,是指,在基于对象的基础上,利用了继承机制和多态性。l面向对象的程序设计特点面向对象的程序设计特点:类具有对数据的抽象性、封装性、继承性、多态性。类具有对数据的抽象性、封装性、继承性、多态性。第十张,

14、PPT共五十六页,创作于2022年6月C+2-11 2.2 类的声明和对象的定义类的声明和对象的定义l类和对象的关系类和对象的关系C+中,中,对象的类型称为类对象的类型称为类(class)。类代表了某一批对象的共同特性。前面已经谈到,。类代表了某一批对象的共同特性。前面已经谈到,类是对象的抽象,而对象是类的具体实例类是对象的抽象,而对象是类的具体实例(instance)。就象结构体类型和结构体变量一样。就象结构体类型和结构体变量一样。C+中,我们先中,我们先声明一个类的类型,然后再定义该类的若干对象。对象就是类这种类型声明一个类的类型,然后再定义该类的若干对象。对象就是类这种类型的一个变量。的

15、一个变量。类是抽象的,不占内存,而对象是具体的,要占用内存空间类是抽象的,不占内存,而对象是具体的,要占用内存空间。第十一张,PPT共五十六页,创作于2022年6月C+2-12 2.2 类的声明和对象的定义类的声明和对象的定义l类的声明类的声明类的声明方法和结构体的声明方法一样,只是将关键字类的声明方法和结构体的声明方法一样,只是将关键字struct 换成换成class:class 类名类名 private:私有数据成员和私有私有数据成员和私有成员函数成员函数;public:公共数据成员和公共公共数据成员和公共成员函数成员函数;/成员访问限定区域先后次序任意,但一种最好只出现一次成员访问限定区

16、域先后次序任意,但一种最好只出现一次,类的成员包含对数据操作的函数,体现了数据和操作的封装类的成员包含对数据操作的函数,体现了数据和操作的封装类的成员不能所有都私有,一般隐藏数据,把成员函数作为对外接口类的成员不能所有都私有,一般隐藏数据,把成员函数作为对外接口成员访问限定符(member access specifier)成员访问限定符(member access specifier)别忘了必须用分号结束!第十二张,PPT共五十六页,创作于2022年6月C+2-13 2.2 类的声明和对象的定义类的声明和对象的定义l类的声明示例类的声明示例类头:类头:class rectangle 类体:类

17、体:private:int length,width,area,perimeter;public:void PutArea()area=length*width;void PutPerimeter()perimeter=(length+width)*2;void display()cout “length=“length endl;cout “width=“width endl;cout “area=“area endl;cout “perimeter=“perimeter endl;在类的外面不能访问私有成员,只能通过公有成员函数间接访问在类的外面可以访问公有成员不指定公有私有,则默认为私有

18、不指定公有私有,则默认为私有一般先出现一般先出现private,后出现,后出现public第十三张,PPT共五十六页,创作于2022年6月C+2-14 类的声明类的声明l还有一种还有一种protected类型,不能被类外访问,但可以被派生类访问类型,不能被类外访问,但可以被派生类访问l一般使用厂商提供的类库一般使用厂商提供的类库l也可以自定义类库,便于单位部门使用也可以自定义类库,便于单位部门使用第十四张,PPT共五十六页,创作于2022年6月C+2-15 2.2 类的声明和对象的定义类的声明和对象的定义l对象的定义对象的定义 声明了类以后,就可以定义该类的对象了。给对象分配了存储空间。声明了

19、类以后,就可以定义该类的对象了。给对象分配了存储空间。其格式为:其格式为:class 类名类名 对象名对象名1,对象名,对象名2,/方括号表示可选项方括号表示可选项l对象定义示例对象定义示例 如前例中,声明了一个名为如前例中,声明了一个名为 rectangle 的类,我们可以定义该类的若干对象:的类,我们可以定义该类的若干对象:class rectangle r1,r2,r3;rectangle r1,r2,r3;第十五张,PPT共五十六页,创作于2022年6月C+2-16 2.2 类的声明和对象的定义类的声明和对象的定义l对象定义对象定义class rectangle private:int

20、 length,width,area,perimeter;public:void PutArea()area=length*width;void PutPerimeter()perimeter=(length+width)*2;void display()cout “length=“length endl;cout “width=“width endl;cout “area=“area endl;cout “perimeter=“perimeter endl;r1,r2;l不出现类名,直接定义对象,不提倡不出现类名,直接定义对象,不提倡第十六张,PPT共五十六页,创作于2022年6月C+2-1

21、7 2.2 类的声明和对象的定义类的声明和对象的定义l类和结构体类型异同类和结构体类型异同 struct/class rectangle public/private:int length,width,area,perimeter;void PutArea()area=length*width;void PutPerimeter()perimeter=(length+width)*2;void display()cout “length=“length endl;cout “width=“width endl;cout “area=“area endl;cout “perimeter=“per

22、imeter endl;r1,r2;l建议使用建议使用CLASS第十七张,PPT共五十六页,创作于2022年6月C+2-18 2.3 类的成员函数类的成员函数l成员函数的性质成员函数的性质类的成员函数也叫类函数,用法和一般函数基本上一样。区别在于它只是类的成员函数也叫类函数,用法和一般函数基本上一样。区别在于它只是属于一个类的成员而出现在类中。它可以被指定为类的私有成员属于一个类的成员而出现在类中。它可以被指定为类的私有成员(private)、公有成员、公有成员(public)或保护成员或保护成员(protected)。使用类函数时,要注意它的使用权限,如果是私有成员,只能被本类的使用类函数时

23、,要注意它的使用权限,如果是私有成员,只能被本类的其他成员函数调用,不能被类外调用(其他成员函数调用,不能被类外调用(工具函数工具函数)。成员函数可以调用本类所有数据成员和成员函数,也可以引)。成员函数可以调用本类所有数据成员和成员函数,也可以引用在本作用域中的有效数据。用在本作用域中的有效数据。通常,我们把类的数据成员定义成通常,我们把类的数据成员定义成私有私有成员,对外屏蔽,而把成员函数定义成成员,对外屏蔽,而把成员函数定义成公有公有成员,他可以调用私有成员和其它成员。成员,他可以调用私有成员和其它成员。一个类若没有成员函数,就退化成一个类若没有成员函数,就退化成C语言的结构体,而失去意义

24、。语言的结构体,而失去意义。第十八张,PPT共五十六页,创作于2022年6月C+2-19 2.3 类的成员函数类的成员函数l在类外定义成员函数在类外定义成员函数成员函数一般在类体中定义,如前面所讲。也可以在类外定义,但要指明成员函数一般在类体中定义,如前面所讲。也可以在类外定义,但要指明是属于哪个类的成员函数,用是属于哪个类的成员函数,用“类名类名:函数名函数名”来指定。例如:来指定。例如:class rectangle private:int length,width,;int area,perimeter;public:void PutArea();void PutPerimeter();

25、void display();void rectangle:PutArea()area=length*width;void rectangle:PutPerimeter()perimeter=(length+width)*2;void rectangle:display()cout “length=“length endl;cout “width=“width endl;cout “area=“area endl;cout “perimeter=“perimeter;rectangle r1,r2,r3;第十九张,PPT共五十六页,创作于2022年6月C+2-20“:”成为域限定符。如果在域限

26、定符前没有类名,或函数名前既没有类名成为域限定符。如果在域限定符前没有类名,或函数名前既没有类名,又没有域限定符:,又没有域限定符::display()或或 display()则表示该函数不属于任何类,它不是成员函数,而是全局函数则表示该函数不属于任何类,它不是成员函数,而是全局函数,即普通函数。,即普通函数。第二十张,PPT共五十六页,创作于2022年6月C+2-21 一般来说,类定义包括两个部分:一般来说,类定义包括两个部分:1、声明部分、声明部分(“做什么做什么”):数据成员数据成员(名称、类型名称、类型)成员函数成员函数(方法方法)2、实现部分、实现部分(“怎么做怎么做”):成员函数的

27、定义和实现成员函数的定义和实现声明在定义之前,也即是类体外定义成员函声明在定义之前,也即是类体外定义成员函数(这里用定义,实际是给函数分配了空间数(这里用定义,实际是给函数分配了空间,后章节详述),后章节详述)减小了类体长度,隐藏了执行细节,提高了类减小了类体长度,隐藏了执行细节,提高了类的保密性的保密性第二十一张,PPT共五十六页,创作于2022年6月C+2-22 2.3 类的成员函数类的成员函数inline 成员函数成员函数类的成员函数也可以指定为内联函数,只要是函数代码较少,有频类的成员函数也可以指定为内联函数,只要是函数代码较少,有频繁使用。我们只要在成员函数的类型签名加上繁使用。我们

28、只要在成员函数的类型签名加上inline 关键字就可以。关键字就可以。lclass rectangle l private:l int length,width,;l int area,perimeter;l public:l inline void PutArea();l inline void PutPerimeter();l void display()cout “length=“length endl;cout “width=“width endl;cout “area=“area endl;cout “perimeter=“perimeter endl;第二十二张,PPT共五十六页,

29、创作于2022年6月C+2-23 2.3 类的成员函数类的成员函数inline 成员函数成员函数class rectangle l private:l int length,width,;l int area,perimeter;l public:l inline void PutArea();l inline void PutPerimeter();l void display();l;void rectangle:display()cout “length=“length endl;cout “width=“width endl;cout “area=“area endl;cout “pe

30、rimeter=“perimeter;Inline第二十三张,PPT共五十六页,创作于2022年6月C+2-24 2.3 类的成员函数类的成员函数inline 成员函数成员函数类体中不包含循环控制结构,此类成员函数自动作为类体中不包含循环控制结构,此类成员函数自动作为inline 成员函数。成员函数。类体外也可定义类体外也可定义inline 成员函数,声明、定义其一显式定义即可,类定义和其成员函数定成员函数,声明、定义其一显式定义即可,类定义和其成员函数定义必须在同一文件(或包含)。义必须在同一文件(或包含)。第二十四张,PPT共五十六页,创作于2022年6月C+2-25 2.3 类的成员函数

31、类的成员函数l成员函数的存储方式成员函数的存储方式同一类定义了多个对象时,每个对象的同一类定义了多个对象时,每个对象的数据成员数据成员各自占据独立的空间,而共享一个共用的各自占据独立的空间,而共享一个共用的函数代码段函数代码段,不占用对象的存储空间。,不占用对象的存储空间。C+为此专门设立了一个名为为此专门设立了一个名为 this 的指针,用来指向不同的对象。当调用对象的指针,用来指向不同的对象。当调用对象r1,成员函数访问的就是,成员函数访问的就是r1的的数据数据成员。所以成员函数建议在类体外定义。成员。所以成员函数建议在类体外定义。数据数据1对象对象r1数据数据2对象对象r2数据数据10对

32、象对象r10共用函数代码共用函数代码第二十五张,PPT共五十六页,创作于2022年6月C+2-26 2.4 对象成员的引用对象成员的引用l用对象名和成员运算符用对象名和成员运算符(.)访问对象成员访问对象成员举例:举例:class rectangle public:int length,width;/公共数据成员公共数据成员 void display();/公共成员函数公共成员函数;void rectangle:display()cout“area=“length*width ednl;cout“perimeter=“lengthclass rectangle public:int lengt

33、h,width;/公共数据成员公共数据成员 void display();/公共成员函数公共成员函数;void rectangle:display()cout“area=“length*width ednl;cout“perimeter=“lenght=5;p-width=4;p-display();用这种方式万分的成员,也必须定义成公用成员!用这种方式万分的成员,也必须定义成公用成员!第二十七张,PPT共五十六页,创作于2022年6月C+2-28 2.4 对象成员的引用对象成员的引用l用对象的引用访问对象成员用对象的引用访问对象成员举例举例:class rectangle public:in

34、t length,width;/公共数据成员公共数据成员 void display();/公共成员函数公共成员函数;void rectangle:display()cout“area=“length*width ednl;cout“perimeter=“(length+width)*2;void main()rectangle r2;rectangle&r3=r2;r3.lenght=5;r3.width=4;r3.display();第二十八张,PPT共五十六页,创作于2022年6月C+2-29 例例l定义一个时间类,并定义一个对象及其引用,输入时分秒输出时:分:秒定义一个时间类,并定义一个

35、对象及其引用,输入时分秒输出时:分:秒l#include lusing namespace std;lint main()l Time t1;l cint2.hour;l cint2.minute;l cint1.sec;l coutt1.hour:t1.minute:t2.secendl;l l 第二十九张,PPT共五十六页,创作于2022年6月C+2-30 例例l#include lusing namespace std;lclass Timel public:l int hour;l int minute;l int sec;l;lint main()l Time t1;l Time&t

36、2=t1;l cint2.hour;l cint2.minute;l cint1.sec;l coutt1.hour:t1.minute:t2.secendl;l l 第三十张,PPT共五十六页,创作于2022年6月C+2-31 例例l定义定义2个对象,分别输入时分秒输出时:分:秒个对象,分别输入时分秒输出时:分:秒l#include lclass Timel public:l int hour;l int minute;l int sec;l;lint main()l return 0;l 第三十一张,PPT共五十六页,创作于2022年6月C+2-32 例例l#include lusing

37、namespace std;lclass Timel public:l int hour;l int minute;l int sec;l;lint main()l Time t1;l cint1.hour;l cint1.minute;l cint1.sec;l coutt1.hour:t1.minute:t1.sect2.hour;l cint2.minute;l cint2.sec;l coutt2.hour:t2.minute:t2.secendl;l return 0;l 第三十二张,PPT共五十六页,创作于2022年6月C+2-33 例:定义函数执行输入输出例:定义函数执行输入输出

38、l#include lusing namespace std;lclass Timel public:l int hour;l int minute;l int sec;l;l int main()void set_time(Time&);void show_time(Time&);Time t1;set_time(t1);show_time(t1);Time t2;set_time(t2);show_time(t2);return 0;l 第三十三张,PPT共五十六页,创作于2022年6月C+2-34 例例l#include lusing namespace std;lclass Timel

39、 public:l int hour;l int minute;l int sec;l;lint main()l l void set_time(Time&);l void show_time(Time&);l Time t1;l set_time(t1);l show_time(t1);l Time t2;l set_time(t2);l show_time(t2);l return 0;l l l void set_time(Time&t)cint.hour;cint.minute;cint.sec;void show_time(Time&t)coutt.hour:t.minute:t.s

40、ecendl;第三十四张,PPT共五十六页,创作于2022年6月C+2-35 例:定义含默认值参数的例:定义含默认值参数的set_time和和show_time函数函数l#include lclass Timel public:l int hour;l int minute;l int sec;l;lint main()l lTime t1;l set_time(t1,12,23,34);l show_time(t1);l Time t2;l set_time(t2);l show_time(t2);ll 第三十五张,PPT共五十六页,创作于2022年6月C+2-36 例例l#include

41、lusing namespace std;lclass Timel public:l int hour;l int minute;l int sec;l;lint main()l l void set_time(Time&,int hour=0,int minute=0,int sec=0);l void show_time(Time&);l Time t1;l set_time(t1,12,23,34);l show_time(t1);l Time t2;l set_time(t2);l show_time(t2);l return 0;l l void set_time(Time&t,in

42、t hour=9,int minute=30,int sec=0)t.hour=hour;t.minute=minute;t.sec=sec;void show_time(Time&t)coutt.hour:t.minute:t.secendl;第三十六张,PPT共五十六页,创作于2022年6月C+2-37 例:定义成员函数输入时分秒并输出例:定义成员函数输入时分秒并输出l#include lclass Timel public:lprivate:l int hour;l int minute;l int sec;l;lint main()l l Time t1;l t1.set_time()

43、;l t1.show_time();l Time t2;l t2.set_time();l t2.show_time();ll void Time:set_time()cinhour;cinminute;cinsec;void Time:show_time()couthour:minute:secendl;第三十七张,PPT共五十六页,创作于2022年6月C+2-38 例例l#include lusing namespace std;lclass Timel public:l void set_time();l void show_time();l private:l int hour;l i

44、nt minute;l int sec;l;lint main()l l Time t1;l t1.set_time();l t1.show_time();l Time t2;l t2.set_time();l t2.show_time();l return 0;l l void Time:set_time()cinhour;cinminute;cinsec;void Time:show_time()couthour:minute:secendl;第三十八张,PPT共五十六页,创作于2022年6月C+2-39 习题习题1第三十九张,PPT共五十六页,创作于2022年6月C+2-40 习题习题1

45、l#include lusing namespace std;lclass Timel public:l int hour;l int minute;l int sec;l ;lTime t;lvoid set_time(void)l cint.hour;l cint.minute;l cint.sec;l void show_time(void)coutt.hour:t.minute:t.secendl;int main()set_time();show_time();return 0;第四十张,PPT共五十六页,创作于2022年6月C+2-41 例例2.4 P61l#include lus

46、ing namespace std;lclass Array_maxlpublic:l void set_value();l void max_value();l void show_value();l private:l int array10;l int max;l;int main()Array_max arrmax;arrmax.set_value();arrmax.max_value();arrmax.show_value();return 0;第四十一张,PPT共五十六页,创作于2022年6月C+2-42 2.6 类的封装和信息隐蔽类的封装和信息隐蔽l公用接口和私有实现的分离公用接

47、口和私有实现的分离我们已经学到,我们已经学到,C+通过类的封装,将类的数据成员和成员函数集成到一个类中。通过类的封装,将类的数据成员和成员函数集成到一个类中。而一般在类的声明时,往往把数据成员指定成私有的,使它们而一般在类的声明时,往往把数据成员指定成私有的,使它们与外界隔离,即,不能在类外直接使用私有成员,外界只能通与外界隔离,即,不能在类外直接使用私有成员,外界只能通过类的公有函数,间接进行对私有成员的操作。换句话说,外过类的公有函数,间接进行对私有成员的操作。换句话说,外界与类的私有成员的唯一联系渠道,就是该类的公有成员函数。界与类的私有成员的唯一联系渠道,就是该类的公有成员函数。所以,

48、我们一般把成员函数指定成公有的所以,我们一般把成员函数指定成公有的(public)性质(除非某些成员函数不想让外界调用)。性质(除非某些成员函数不想让外界调用)。这就是所谓的这就是所谓的“外部接口外部接口”与内部实现的分离,以起到信息隐蔽的作用。与内部实现的分离,以起到信息隐蔽的作用。而这是软件工程最基本的原则。而这是软件工程最基本的原则。第四十二张,PPT共五十六页,创作于2022年6月C+2-43 定义一个类就是实现对定义一个类就是实现对创建一个对象的数据结创建一个对象的数据结构的描述。构的描述。在类中,一些成员是保在类中,一些成员是保护的,被有效地屏蔽,护的,被有效地屏蔽,以防外界的干扰

49、和误操以防外界的干扰和误操作。作。另一些成员是公共的另一些成员是公共的,作为接口提供外界,作为接口提供外界使用。使用。右图是对它们采用的图右图是对它们采用的图示方法说明类的组成结示方法说明类的组成结构。以构。以Point 类为例。类为例。xoffsetyoffsetsetangleradiusxy封封装装体体内内部部数数据据成成员员Point 类类访访问问接接口口第四十三张,PPT共五十六页,创作于2022年6月C+2-44 2.6 类的封装和信息隐蔽类的封装和信息隐蔽l类声明和成员函数定义的分离类声明和成员函数定义的分离当一个类被多个程序使用时,一般将类的声明(包括成员函数当一个类被多个程序

50、使用时,一般将类的声明(包括成员函数的声明)放在指定的头文件中,用户在编程时,将该头文件包的声明)放在指定的头文件中,用户在编程时,将该头文件包含近来就可以了。而不必在每个使用该类的程序中重复书写该含近来就可以了。而不必在每个使用该类的程序中重复书写该类的声明。类的声明。我们然后可以直接在程序中直接定义该类的对象,直接调用该类的我们然后可以直接在程序中直接定义该类的对象,直接调用该类的公有成员函数。为了实现信息隐蔽,对类的成员函数的定义一般不公有成员函数。为了实现信息隐蔽,对类的成员函数的定义一般不放在头文件中,而放在另一个文件中。放在头文件中,而放在另一个文件中。然后按照对多文件程序的编译和

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁