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

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

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

1、面向对象程序设计之面向对象程序设计之类和对象类和对象第1页,此课件共53页哦2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是面向对象的程序设计什么是面向对象的程序设计?面向对象的程序设计面向对象的程序设计(Object-Oriented Programming)和传统的和传统的结构化程序设计的思路完全不同。结构化程序设计的思路完全不同。面向对象的程序设计和人们面向对象的程序设计和人们日常生活解决问题日常生活解决问题的思路是相似的。的思路是相似的。比如,我们生产汽车时,不是顺序制造发动机,在设计制造底盘、比如,我们生产汽车时,不是顺序制造发动机,在设计制造底盘、车身、轮子。而是分

2、别设计制造发动机、底盘、车身和轮子,最车身、轮子。而是分别设计制造发动机、底盘、车身和轮子,最后组装在一起。组装时,各部件之间有联系,以便协调工作。例后组装在一起。组装时,各部件之间有联系,以便协调工作。例如,司机踩油门,就能调节油路,控制发动机的转速,就能驱动如,司机踩油门,就能调节油路,控制发动机的转速,就能驱动车轮。车轮。第2页,此课件共53页哦2.1 面向对象程序设计方法概述面向对象程序设计方法概述程序设计者的程序设计者的任务有两个任务有两个:一是设计所需要的类和对象,即确:一是设计所需要的类和对象,即确定那些数据和操作定那些数据和操作封装封装在一起;在一起;(类设计者、核心模块产品提

3、供商类设计者、核心模块产品提供商)二是考虑怎样向有关对象发送二是考虑怎样向有关对象发送消息消息,以启动相关对象的操作。,以启动相关对象的操作。(主程序设计者,外包程序,面向用户的公司)(主程序设计者,外包程序,面向用户的公司)编程者如同一个总调度,不断地向各个对象发出命令,让这些对象编程者如同一个总调度,不断地向各个对象发出命令,让这些对象活动起来,完成指定的工作。活动起来,完成指定的工作。这就是面向对象的程序设计的基本思路。这就是面向对象的程序设计的基本思路。第3页,此课件共53页哦2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是对象什么是对象(object)?一个对象由一组

4、一个对象由一组“属性属性”和一组和一组“行为行为”构成。并根据外界给它的构成。并根据外界给它的消息进行相应的操作。系统中多个对象通过一定的渠道相互联系。消息进行相应的操作。系统中多个对象通过一定的渠道相互联系。任何任何事物事物都可以看成一个对象。可以是自然物体,也可以是逻辑结都可以看成一个对象。可以是自然物体,也可以是逻辑结构。构。例:例:一个班级作为对象一个班级作为对象一个班级作为对象,有两个要素:一是班级的静态特征,如班级所属的专业,一个班级作为对象,有两个要素:一是班级的静态特征,如班级所属的专业,学生人数、班主任姓名等,这种静态特征称为学生人数、班主任姓名等,这种静态特征称为“属性属性

5、”;另一个是班级的;另一个是班级的动态特征,如上课,体育比赛,开会等,称为动态特征,如上课,体育比赛,开会等,称为“行为行为”。外界向班级发一。外界向班级发一个信息(如上课铃声,广播通知),我们称之为个信息(如上课铃声,广播通知),我们称之为“消息消息”,班级就会发生,班级就会发生一个操作(要么上课,要么开会)一个操作(要么上课,要么开会)第4页,此课件共53页哦2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是什么是C+对象?对象?C+中,每个对象都由若干中,每个对象都由若干数据(属性)数据(属性)和若干和若干函数(操作行为)函数(操作行为)组成。数据就是对象的组成。数据就是对

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

7、加工计算,以实现求出面积、周长等功能。行加工计算,以实现求出面积、周长等功能。第5页,此课件共53页哦2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是对象封装什么是对象封装(encapsulation)?就是把对象的不想让外界知道的属性和功能屏蔽起来,让外界看不就是把对象的不想让外界知道的属性和功能屏蔽起来,让外界看不见。封装有两个含义,见。封装有两个含义,一是将有关的数据和操作函数封装成一个基本单位,即对象内。各对象之一是将有关的数据和操作函数封装成一个基本单位,即对象内。各对象之间间相互独立,互不干扰相互独立,互不干扰;二是将对象中的部分属性或功能二是将对象中的部分属性或功

8、能对外隐蔽对外隐蔽,只留少数接口向外公布,以接,只留少数接口向外公布,以接收外界信息。收外界信息。对象封装的好处在于,降低了人们操作对象的复杂程度。使用对象的人,不对象封装的好处在于,降低了人们操作对象的复杂程度。使用对象的人,不必知道对象内部的实现细节,只需要了解外部功能就可以自如地操作该对必知道对象内部的实现细节,只需要了解外部功能就可以自如地操作该对象。象。对象的行为由类的内部数据结构和相关的操作确定;外部行为通过对象的行为由类的内部数据结构和相关的操作确定;外部行为通过操作接口实现。人们关心的就是操作接口(函数名)所能提供的服务。操作接口实现。人们关心的就是操作接口(函数名)所能提供的

9、服务。第6页,此课件共53页哦2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是抽象什么是抽象(abstraction)?将具有相同特性的事物归纳、集中成一个统一类型,称为将具有相同特性的事物归纳、集中成一个统一类型,称为抽抽象象。比如,把张三,李四,王五归纳为一类,我们称之为。比如,把张三,李四,王五归纳为一类,我们称之为“人人”。抽象的作用,是表示同类事物的抽象的作用,是表示同类事物的本质本质。C和和C+中,中,数据类型数据类型就是对一批具体数据的抽象,整形数据就是就是对一批具体数据的抽象,整形数据就是所有整数的抽象。所有整数的抽象。“类类”是是“对象对象”的抽象,的抽象,“

10、对象对象”则是类的则是类的“特例特例”,或,或“具具体表现形式体表现形式”。第7页,此课件共53页哦2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是继承什么是继承(inherit)?B类在类在A类的基础上增加了少量内容。我们显然不必重新设计一个类的基础上增加了少量内容。我们显然不必重新设计一个新类新类B,只需要把,只需要把A类拿过来,在此基础上添加新内容就可以了。这就是类拿过来,在此基础上添加新内容就可以了。这就是面向对象程序设计的面向对象程序设计的继承机制继承机制。C+提供继承机制,大大节省了编程工作量,这就是所谓提供继承机制,大大节省了编程工作量,这就是所谓“软件软件重用重

11、用(software reusability)”的思想。对于大型软件的开发具有重要的思想。对于大型软件的开发具有重要意义。意义。第8页,此课件共53页哦2.1 面向对象程序设计方法概述面向对象程序设计方法概述l什么是多态性什么是多态性(polymorphism)?如果有几个如果有几个相似而不同相似而不同的对象,人们往往要求在向它们发出的对象,人们往往要求在向它们发出同一个消息同一个消息时,各自作出时,各自作出不同的操作不同的操作,这种情况就是,这种情况就是“多态现象多态现象”。C+中,所谓多态性是指,由中,所谓多态性是指,由继承而产生继承而产生的相关的不同的类,的相关的不同的类,其对象对同一消

12、息会作出不同的响应。其对象对同一消息会作出不同的响应。显然,多态性能增加程序的灵活性,它是面向对象程序设计的重显然,多态性能增加程序的灵活性,它是面向对象程序设计的重要特征。要特征。第9页,此课件共53页哦2.1 面向对象程序设计方法概述面向对象程序设计方法概述l类与对象的作用类与对象的作用C+全面支持传统的面向过程的程序设计(即结构化编程),也支持全面支持传统的面向过程的程序设计(即结构化编程),也支持基于对象和面向对象的程序设计。基于对象和面向对象的程序设计。所谓所谓基于基于对象,是指程序是以类和对象为基础,程序的操作是围绕对对象,是指程序是以类和对象为基础,程序的操作是围绕对象进行的。象

13、进行的。所谓所谓面向面向对象,是指,在基于对象的基础上,利用了继承机制和对象,是指,在基于对象的基础上,利用了继承机制和多态性。多态性。l面向对象的程序设计特点面向对象的程序设计特点:类具有对数据的抽象性、封装性、继承性、多态性。类具有对数据的抽象性、封装性、继承性、多态性。第10页,此课件共53页哦2.2 类的声明和对象的定义类的声明和对象的定义l类和对象的关系类和对象的关系C+中,中,对象的类型称为类对象的类型称为类(class)。类代表了某一批对象。类代表了某一批对象的共同特性。前面已经谈到,的共同特性。前面已经谈到,类是对象的抽象,而对象是类的具体类是对象的抽象,而对象是类的具体实例实

14、例(instance)。就象结构体类型和结构体变量一样。就象结构体类型和结构体变量一样。C+中,我们先中,我们先声明一个类的类型,然后再定义该类的若干声明一个类的类型,然后再定义该类的若干对象。对象就是类这种类型的一个变量。对象。对象就是类这种类型的一个变量。类是抽象的,不占内存,而对象是具体的,要占用内存空间类是抽象的,不占内存,而对象是具体的,要占用内存空间。第11页,此课件共53页哦2.2 类的声明和对象的定义类的声明和对象的定义l类的声明类的声明类的声明方法和结构体的声明方法一样,只是将关键字类的声明方法和结构体的声明方法一样,只是将关键字struct 换成换成class:class

15、类名类名 private:私有数据成员和私有私有数据成员和私有成员函数成员函数;public:公共数据成员和公共公共数据成员和公共成员函数成员函数;/成员访问限定区域先后次序任意,但一种最好只出现一次成员访问限定区域先后次序任意,但一种最好只出现一次,类的成员包含对数据操作的函数,体现了数据和操作的封装类的成员包含对数据操作的函数,体现了数据和操作的封装类的成员不能所有都私有,一般隐藏数据,把成员函数作为对外接口类的成员不能所有都私有,一般隐藏数据,把成员函数作为对外接口成员访问限定符(member access specifier)成员访问限定符(member access specifie

16、r)别忘了必须用分号结束!第12页,此课件共53页哦2.2 类的声明和对象的定义类的声明和对象的定义l类的声明示例类的声明示例类头:类头:class rectangle 类体:类体: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 end

17、l;cout “perimeter=“perimeter endl;在类的外面不能访问私有成员,只能通过公有成员函数间接访问在类的外面可以访问公有成员不指定公有私有,则默认为私有不指定公有私有,则默认为私有一般先出现一般先出现private,后出现,后出现public第13页,此课件共53页哦类的声明类的声明l还有一种还有一种protected类型,不能被类外访问,但可以被类型,不能被类外访问,但可以被派生类访问派生类访问l一般使用厂商提供的类库一般使用厂商提供的类库l也可以自定义类库,便于单位部门使用也可以自定义类库,便于单位部门使用第14页,此课件共53页哦2.2 类的声明和对象的定义类的

18、声明和对象的定义l对象的定义对象的定义 声明了类以后,就可以定义该类的对象了。给对象分配了存储空间。声明了类以后,就可以定义该类的对象了。给对象分配了存储空间。其格式为:其格式为:class 类名类名 对象名对象名1,对象名,对象名2,/方括号表示可选项方括号表示可选项l对象定义示例对象定义示例 如前例中,声明了一个名为如前例中,声明了一个名为 rectangle 的类,我们可以定义该类的的类,我们可以定义该类的若干对象:若干对象:class rectangle r1,r2,r3;rectangle r1,r2,r3;第15页,此课件共53页哦2.2 类的声明和对象的定义类的声明和对象的定义l

19、对象定义对象定义class rectangle 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;r1,r2;l不出现类名,直接定义对象,不提倡不出现类名,直接定义

20、对象,不提倡第16页,此课件共53页哦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;cou

21、t “perimeter=“perimeter endl;r1,r2;l建议使用建议使用CLASS第17页,此课件共53页哦2.3 类的成员函数类的成员函数l成员函数的性质成员函数的性质类的成员函数也叫类函数,用法和一般函数基本上一样。区别在于它类的成员函数也叫类函数,用法和一般函数基本上一样。区别在于它只是属于一个类的成员而出现在类中。它可以被指定为类的私有成只是属于一个类的成员而出现在类中。它可以被指定为类的私有成员员(private)、公有成员、公有成员(public)或保护成员或保护成员(protected)。使用类函数时,要注意它的使用权限,如果是私有成员,只使用类函数时,要注意它的

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

23、语言的结构体,而失去意义。第18页,此课件共53页哦2.3 类的成员函数类的成员函数l在类外定义成员函数在类外定义成员函数成员函数一般在类体中定义,如前面所讲。也可以在类外定成员函数一般在类体中定义,如前面所讲。也可以在类外定义,但要指明是属于哪个类的成员函数,用义,但要指明是属于哪个类的成员函数,用“类名类名:函数名函数名”来指来指定。例如:定。例如:class rectangle private:int length,width,;int area,perimeter;public:void PutArea();void PutPerimeter();void display();void

24、 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;第19页,此课件共53页哦“:”成为域限定符。如果在域限定符前没有类名,或函数名前既成为域限定符。如果在域限定符前没有类名,或函

25、数名前既没有类名,又没有域限定符:没有类名,又没有域限定符::display()或或 display()则表示该函数不属于任何类,它不是成员函数,而是全局函数,即普通则表示该函数不属于任何类,它不是成员函数,而是全局函数,即普通函数。函数。第20页,此课件共53页哦 一般来说,类定义包括两个部分:一般来说,类定义包括两个部分:1、声明部分、声明部分(“做什么做什么”):数据成员数据成员(名称、类型名称、类型)成员函数成员函数(方法方法)2、实现部分、实现部分(“怎么做怎么做”):成员函数的定义和实现成员函数的定义和实现声明在定义之前,也即是类体外定义成员函声明在定义之前,也即是类体外定义成员函

26、数(这里用定义,实际是给函数分配了空间,数(这里用定义,实际是给函数分配了空间,后章节详述)后章节详述)减小了类体长度,隐藏了执行细节,提高了减小了类体长度,隐藏了执行细节,提高了类的保密性类的保密性第21页,此课件共53页哦2.3 类的成员函数类的成员函数inline 成员函数成员函数类的成员函数也可以指定为内联函数,只要是函数代码较少,类的成员函数也可以指定为内联函数,只要是函数代码较少,有频繁使用。我们只要在成员函数的类型签名加上有频繁使用。我们只要在成员函数的类型签名加上inline 关键字就关键字就可以。可以。lclass rectangle l private:l int leng

27、th,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;第22页,此课件共53页哦2.3 类的成员函数类的成员函数inline 成员函数成员函数class rectangle l private:l int length,widt

28、h,;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 “perimeter=“perimeter;Inline第23页,此课件共53页哦2.3 类的成员函数类的成员函数inline 成员函数成员函数类体中不包含循环控制结构,此类成员函数自动作

29、为类体中不包含循环控制结构,此类成员函数自动作为inline 成员函数。成员函数。类体外也可定义类体外也可定义inline 成员函数,声明、定义其一显式定义即可,类成员函数,声明、定义其一显式定义即可,类定义和其成员函数定义必须在同一文件(或包含)。定义和其成员函数定义必须在同一文件(或包含)。第24页,此课件共53页哦2.3 类的成员函数类的成员函数l成员函数的存储方式成员函数的存储方式同一类定义了多个对象时,每个对象的同一类定义了多个对象时,每个对象的数据成员数据成员各自占据独立各自占据独立的空间,而共享一个共用的的空间,而共享一个共用的函数代码段函数代码段,不占用对象的存储空间。,不占用

30、对象的存储空间。C+为此专门设立了一个名为为此专门设立了一个名为 this 的指针,用来指向不同的对的指针,用来指向不同的对象。当调用对象象。当调用对象r1,成员函数访问的就是,成员函数访问的就是r1的的数据数据成员。所以成员函成员。所以成员函数建议在类体外定义。数建议在类体外定义。数据数据1对象对象r1数据数据2对象对象r2数据数据10对象对象r10共用函数代码共用函数代码第25页,此课件共53页哦2.4 对象成员的引用对象成员的引用l用对象名和成员运算符用对象名和成员运算符(.)访问对象成员访问对象成员举例:举例:class rectangle public:int length,widt

31、h;/公共数据成员公共数据成员 void display();/公共成员函数公共成员函数;void rectangle:display()cout“area=“length*width ednl;cout“perimeter=“lengthclass rectangle public:int length,width;/公共数据成员公共数据成员 void display();/公共成员函数公共成员函数;void rectangle:display()cout“area=“length*width ednl;cout“perimeter=“lenght=5;p-width=4;p-display

32、();用这种方式万分的成员,也必须定义成公用成员!用这种方式万分的成员,也必须定义成公用成员!第27页,此课件共53页哦2.4 对象成员的引用对象成员的引用l用对象的引用访问对象成员用对象的引用访问对象成员举例举例:class rectangle public:int length,width;/公共数据成员公共数据成员 void display();/公共成员函数公共成员函数;void rectangle:display()cout“area=“length*width ednl;cout“perimeter=“(length+width)*2;void main()rectangle r2

33、;rectangle&r3=r2;r3.lenght=5;r3.width=4;r3.display();第28页,此课件共53页哦例例l定义一个时间类,并定义一个对象及其引用,输入时分秒输出时:分:秒定义一个时间类,并定义一个对象及其引用,输入时分秒输出时:分:秒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 第29页,此课件共53页哦例例l#include lusing name

34、space std;lclass Timel public:l int hour;l int minute;l int sec;l;lint main()l Time t1;l Time&t2=t1;l cint2.hour;l cint2.minute;l cint1.sec;l coutt1.hour:t1.minute:t2.secendl;l l 第30页,此课件共53页哦例例l定义定义2个对象,分别输入时分秒输出时:分:秒个对象,分别输入时分秒输出时:分:秒l#include lclass Timel public:l int hour;l int minute;l int sec;

35、l;lint main()l return 0;l 第31页,此课件共53页哦例例l#include lusing 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;

36、l 第32页,此课件共53页哦例:定义函数执行输入输出例:定义函数执行输入输出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 第33页,此课件共53页哦例例l#include lusing namesp

37、ace std;lclass Timel 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)cou

38、tt.hour:t.minute:t.secendl;第34页,此课件共53页哦例:定义含默认值参数的例:定义含默认值参数的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 第35页,此课件共53页哦例例l#include lusing namespace s

39、td;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,int hour=9,int minut

40、e=30,int sec=0)t.hour=hour;t.minute=minute;t.sec=sec;void show_time(Time&t)coutt.hour:t.minute:t.secendl;第36页,此课件共53页哦例:定义成员函数输入时分秒并输出例:定义成员函数输入时分秒并输出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();l t1.show_time();l Time t2;l t2.set_

41、time();l t2.show_time();ll void Time:set_time()cinhour;cinminute;cinsec;void Time:show_time()couthour:minute:secendl;第37页,此课件共53页哦例例l#include lusing namespace std;lclass Timel public:l void set_time();l void show_time();l private:l int hour;l int minute;l int sec;l;lint main()l l Time t1;l t1.set_ti

42、me();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;第38页,此课件共53页哦习题习题1第39页,此课件共53页哦习题习题1l#include lusing namespace std;lclass Timel public:l int hour;l int minute;l int sec;l ;lTime

43、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;第40页,此课件共53页哦例例2.4 P61l#include lusing namespace std;lclass Array_maxlpublic:l void set_value();l void max_value();l void show_value();l private:l

44、int array10;l int max;l;int main()Array_max arrmax;arrmax.set_value();arrmax.max_value();arrmax.show_value();return 0;第41页,此课件共53页哦2.6 类的封装和信息隐蔽类的封装和信息隐蔽l公用接口和私有实现的分离公用接口和私有实现的分离我们已经学到,我们已经学到,C+通过类的封装,将类的数据成员和成员函通过类的封装,将类的数据成员和成员函数集成到一个类中。而一般在类的声明时,往往把数据成员指定成私数集成到一个类中。而一般在类的声明时,往往把数据成员指定成私有的,使它们与外界隔

45、离,即,不能在类外直接使用私有成员,外界有的,使它们与外界隔离,即,不能在类外直接使用私有成员,外界只能通过类的公有函数,间接进行对私有成员的操作。换句话说,外只能通过类的公有函数,间接进行对私有成员的操作。换句话说,外界与类的私有成员的唯一联系渠道,就是该类的公有成员函数。界与类的私有成员的唯一联系渠道,就是该类的公有成员函数。所以,我们一般把成员函数指定成公有的所以,我们一般把成员函数指定成公有的(public)性质(除非性质(除非某些成员函数不想让外界调用)。某些成员函数不想让外界调用)。这就是所谓的这就是所谓的“外部接口外部接口”与内部实现的分离,以起到信息隐蔽与内部实现的分离,以起到

46、信息隐蔽的作用。而这是软件工程最基本的原则。的作用。而这是软件工程最基本的原则。第42页,此课件共53页哦 定义一个类就是实现定义一个类就是实现对创建一个对象的数据对创建一个对象的数据结构的描述。结构的描述。在类中,一些成员在类中,一些成员是保护的,被有效地是保护的,被有效地屏蔽,以防外界的干屏蔽,以防外界的干扰和误操作。扰和误操作。另一些成员是公共的,另一些成员是公共的,作为接口提供外界使用。作为接口提供外界使用。右图是对它们采用的右图是对它们采用的图示方法说明类的组成图示方法说明类的组成结构。以结构。以Point 类为例。类为例。xoffsetyoffsetsetangleradiusxy

47、封封装装体体内内部部数数据据成成员员Point 类类访访问问接接口口第43页,此课件共53页哦2.6 类的封装和信息隐蔽类的封装和信息隐蔽l类声明和成员函数定义的分离类声明和成员函数定义的分离当一个类被多个程序使用时,一般将类的声明(包括成员函数当一个类被多个程序使用时,一般将类的声明(包括成员函数的声明)放在指定的头文件中,用户在编程时,将该头文件包含近来的声明)放在指定的头文件中,用户在编程时,将该头文件包含近来就可以了。而不必在每个使用该类的程序中重复书写该类的声明。就可以了。而不必在每个使用该类的程序中重复书写该类的声明。我们然后可以直接在程序中直接定义该类的对象,直接调我们然后可以直

48、接在程序中直接定义该类的对象,直接调用该类的公有成员函数。为了实现信息隐蔽,对类的成员函数用该类的公有成员函数。为了实现信息隐蔽,对类的成员函数的定义一般不放在头文件中,而放在另一个文件中。的定义一般不放在头文件中,而放在另一个文件中。然后按照对多文件程序的编译和运行方法对程序进行编译和连然后按照对多文件程序的编译和运行方法对程序进行编译和连接。请看下面示例。接。请看下面示例。第44页,此课件共53页哦2.6 类的封装和信息隐蔽类的封装和信息隐蔽/rectangle.hclass rectangle private:int length,width;public:void Put();void

49、 display();/rectangle.cpp#include#include“rectangle.h”void rectangle:Put()length=5;width=4;void rectangle:display()cout“area=“length*width endl;/main.cpp#include#include“rectangle.h”void main()rectangle r1;r1.display();第45页,此课件共53页哦2.6 类的封装和信息隐蔽类的封装和信息隐蔽在实际运用中,将若干功能相近的类声明集中在一起,形在实际运用中,将若干功能相近的类声明集中在

50、一起,形成类库。类库包括两个组成部分:成类库。类库包括两个组成部分:类声明头文件;类声明头文件;经过编译的头文件函数的定义的目标文件。经过编译的头文件函数的定义的目标文件。用户只需要将类库装入自己的计算机中用户只需要将类库装入自己的计算机中C+系统的子目录下,系统的子目录下,并在程序中用并在程序中用#include命令将有关类声明的头文件包含到程序中,命令将有关类声明的头文件包含到程序中,就可以使用这些类和其中的成员函数了。就可以使用这些类和其中的成员函数了。第46页,此课件共53页哦2.6 类的封装和信息隐蔽类的封装和信息隐蔽l面向对象程序设计中的几个名词面向对象程序设计中的几个名词u方法:

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

当前位置:首页 > 教育专区 > 大学资料

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

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