第8章类和对象.ppt
《第8章类和对象.ppt》由会员分享,可在线阅读,更多相关《第8章类和对象.ppt(53页珍藏版)》请在三一文库上搜索。
1、第8章 类和对象,8.1面向对象程序设计方法概述 8.2类的声明和对象的定义 8.3类的成员函数 8.4对象成员的引用 8.5类的封装性和信息隐蔽 8.6类和对象的简单应用举例,面向过程的程序设计: 以功能为中心,采用函数来描述。 面向对象程序设计(OOP) : 面向对象程序设计方法认为,客观世界是由各种各样的实体组成的,这些实体就是面向对象方法中的对象。 消息是向某对象请求服务的一种表达方式 对象之间的交互通过发送消息来实现。 消息包括:目标对象 ,请求的方法 ,参数,8.1 面向对象程序设计方法概述,8.1.1 什么是面向对象的程序设计,1. 对象 客观世界中任何一个事物都可以看成一个对象
2、。 对象两要素: 属性(attribute):对象的静态特征 行为(behavior):对象的动态特征,它能根据外界给的信息进行相应的操作。 一个对象是由一组属性和一组行为构成的。,图 8.1,在一个系统中的多个对象之间通过一定的渠道相互联系,要使某一个对象实现某一种行为(即操作),应当向它传送相应的消息。对象之间就是这样通过发送和接收消息互相联系的。,在C+中,每个对象都是由数据和函数(即操作代码)这两部分组成的,见图: 如三角形对象: 属性:它的3个边长。 行为:计算出三角形的面积,并且输出 调用对象中的函数就是向该对象传送一个消息(message),要求该对象实现某一行为(功能)。,2.
3、 封装与信息隐蔽 “封装”,指两方面的含义: 将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。 将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息。 C+的对象中的函数名就是对象的对外接口,外界可以通过函数名来调用这些函数来实现某些行为(功能)。,3. 抽象 抽象(abstraction):有关事物的共性归纳、集中的过程。抽象的作用是表示同一类事物的本质。 对象是具体存在的,如一个三角形可以作为一个对象,10个不同尺寸的三角形是10个对象。如果这10个三角形对象有相同的属性和行为,可以将它们抽象为一种类型,称为三
4、角形类型。在C+中,这种类型就称为“类(class)”。这10个三角形就是属于同一“类”的对象。类是对象的抽象,而对象则是类的特例,或者说是类的具体表现形式。,4.继承与重用,继承:在原有基础上增加新的内容。 例: 白色的马 重用:利用一个已有的类建立一个新的类,即“软件重用”思想。,5. 多态性 多态性:是指允许不同类的对象对同一个消息作出的响应各不相同。 多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。,一个传统的面向过程程序设计是围绕功能进行的,用一个函数实现功能。所有的数据都是公用的,一个函数可以使用任何一组数据,而一组数据又能被多个函数所使用(见图8.3)。,8.1.2
5、面向对象程序设计的特点,图8.3,面向对象程序设计任务包括两个方面: 一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起; 二是考虑怎样向有关对象发送消息,以完成所需的任务。 这时他如同一个总调度,不断地向各个对象发出命令,让这些对象活动起来(或者说激活这些对象),完成自己职责范围内的工作。各个对象的操作完成了,整体任务也就完成了。,在面向过程的结构化程序设计中程序表述: 程序=算法数据结构 在面向对象的结构化程序设计中程序表述: 对象 = 算法 数据结构 程序 = (对象+对象+对象+) + 消息 或: 程序 = 对象s + 消息 “对象s”表示多个对象。消息的作用就是对对象的控制
6、。程序设计的关键是设计好每一个对象,及确定向这些对象发出的命令,使各对象完成相应操作。,8.1.3 类和对象的作用,面向对象的软件工程包括以下几个部分: 面向对象分析(object oriented analysis,OOA) 面向对象设计(object oriented design,OOD) 面向对象编程(object oriented programming, OOP) 面向对象测试(object oriented test,OOT) 面向对象维护(object oriented soft maintenance, OOSM),8.1.4 面向对象的软件开发,每一个实体都是对象。对象的类
7、型称为类(class)。 类是对象的抽象,而对象是类的具体实例(instance) 例如:结构体类型和结构体变量的关系一样,在C+中也是先声明一个类类型,然后用它去定义若干个同类型的对象。 对象就是类类型的一个变量。可以说类是对象的模板。 类是抽象的,不占用内存,而对象是具体的,占用存储空间。,8.2 类的声明和对象的定义 8.2.1 类和对象的关系,下面是声明一个结构体类型的方法: struct Student /声明了一个名为Student的结构体类型 int num; char name20; char sex; ;Student stud1,stud2; /定义了两个结构体变量stud
8、1和stud2。它只包括数据,没有包括操作。,8.2.2 声明类类型,类是用户自己指定的类型。必须自己根据需要进行声明,类要先声明后使用。,现在声明一个类: class Student /以class开头 int num; char name20; char sex; /以上3行是数据成员 void display( ) /这是成员函数 coutnum:numendl; coutname:nameendl; coutsex:sexendl; ; Student stud1,stud2;,定义了Student 类的对象stud1和stud2,类声明的一般形式如下: class 类名 privat
9、e: 私有的数据和成员函数; public: 公用的数据和成员函数; ; private和public称为成员访问限定符。 如果在类的定义中既不指定private 或public ,则系统就默认为是私有的。 protected声明的成员称为受保护的成员,它不能被类外访问(这点与私有成员类似),但可以被派生类的成员函数访问。,1. 先声明类类型,然后再定义对象 (1) class 类名 对象名 例如: class Student stud1,stud2; (2) 类名 对象名 例如: Student stud1,stud2;,8.2.3 定义对象的方法,2. 在声明类类型的同时定义对象 clas
10、s Student /声明类类型 public: /先声明公用部分 void display( ) coutnum:numendl; coutname:nameendl; coutsex:sexendl; private: /后声明私有部分 int num; char name20; char sex; stud1,stud2; /定义了两个Student类的对象,3. 不出现类名,直接定义对象 class /无类名 private: /声明以下部分为私有的 public: /声明以下部分为公用的 stud1,stud2; /定义了两个无类名的类对象 直接定义对象,在C+中是合法的、允许的,但
11、却很少用,也不提倡用。在定义一个对象时,编译系统会为这个对象分配存储空间,以存放对象中的成员。,8.2.4 类和结构体类型的异同,struct Student int num; char name20; char sex; void display() coutnumendl; coutnameendl; coutsexendl; ;,class Student int num; char name20; char sex; void display() coutnumendl; coutnameendl; coutsexendl; ;,公有的,私有的,类的成员函数与一般函数的区别: 类的成员
12、函数属于一个类的成员,出现在类体中。它可以被指定为private(私有的)、public(公用的)或protected(受保护的)。 在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数)。 例如:私有的成员函数只能被本类中的其他成员函数所调用,而不能被类外调用。,8.3 类的成员函数 8.3.1 成员函数的性质,class Student public: void display( ); /在类内声明display类函数 private: int num; string name; char sex; void Studentdisplay( )
13、 /在类外定义类函数 coutnum:numendl; coutname:nameendl; coutsex:sexendl; Student stud1,stud2; /定义两个类对象,8.3.2 在类外定义成员函数,注意: 在类体中直接定义函数时,函数名前不加类名 成员函数在类外定义时,必须在函数名前面加上类名,予以限定(qualifed),“”是作用域限定符 如果函数名前面既无类名又无作用域运算符“”,如 :display( ) 或 display( ) 则表示display函数是全局函数,即一般普通函数。 类函数在类外定义,类体的位置应在函数定义之前 如果一个函数,其函数体只有23行,
14、一般可在声明类时在类体中定义。,为了提高运行时的效率,对于较简单的函数可以声明为内联形式(函数代码嵌入程序的调用点) 内联函数体中不能有复杂结构(如循环语句和switch语句) 在类中声明内联成员函数的方式: 将函数体放在类的声明中。 使用inline关键字。,8.3.3 inline 成员函数,例:在类中定义内联函数。 class Student public: void display( ) /或inline void display( ) coutnum:numendl; coutname:nameendl; coutsex:sexendl; private: int num; stri
15、ng name; char sex; ;,例:在类中声明、类外定义的内联成员函数 class Student public: inline void display( ); /声明此函数为内置函数 private: int num;string name; char sex; ; inline void Studentdisplay( ) / 在类外定义内联函数 coutnum:numendl; coutname:nameendl; coutsex:sexendl; ,例如:计算该类对象所占用的字节数。 class Time public: int hour; int minute; int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对象
链接地址:https://www.31doc.com/p-3134124.html