



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4.4 类(class)类是一种数据类型,与普通的数据类型不同的是类不仅包含数据,还包含对数据的操作,类把数据和数据操作方法封装在一起,作为一个整体参与程序的运行。类具有课继承性,创建一个新的类的时候,可以在一个基类中添加成员派生出新类。类的变量和类的实例是不同的,类的实例是动态分配的内存区域,通常称类的实例维“对象”,同一个类可以有不同的实例存在,他们个子有自己的数据,但是数据操作方法是相同的。类的变量可以看作是一个指针,指向类的实例。在MATLAB中,为了更好地进行数据的封装,更加抽象地描述对象,也定义了类。图2.4.1给出了MATLAB中类的层次结构图,在建立类的结构的时候,可以根据这一层次结构进行设计和继承。4.4.1 建立一个类通常一个类应该包含四个基本的成员函数:构造函数 与类名相同,可以在其中完成成员初始化的工作;显示函数 名为display,用于显示成员的数据;赋值函数 名为set,用于设置类成员的数值;取值函数 名为get,用于读取类成员的函数。与C的类不同的是,MATLAB的类不需要特别的析构函数。如果类用到了一些特殊的内容需要释放的话,可以编写一个成员函数,比如classclear,用包来释放所占用的资源。下面用一个简单的例子类介绍一些类如何使用。定义一个名为list的类,它有两个数据成员x和y,希望通过一个成员函数prod()来获取x和y的乘积。本例的类是这样的:类名: list成员变量:x,y成员函数:list:构造函数display:显示函数get:取值函数set:赋值函数prod:计算函数现在就来建立它。(1) 在工作目录上建立一个子目录(以笔者的习惯为例):cd E:MyProgrammatlab7chap4mkdir list类名前面要加上一个字符,对于这样形式的目录里所有保存的M文件,MATLAB都认为是类的成员函数。(2) 编写5个成员函数的M文件保存在E:MyProgrammatlab7chap4list 目录下:% list.mfunction d = list(x,y)d.x=x;d.y=y;d=class(d,list); % display.mfunction display(d)fprintf(list class:n);fprintf(x=%dn,d.x);fprintf(y=%dn,d.y); % get.mfunction val = get(d,prop_name)switch prop_name case x val=d.x; case y val=d.y; otherwise error(prop_name,is not a valid list property);end %set.mfunction d = set(d,varargin) % 该函数的定义在后面的章节再详细讲解argin=varargin;while length(argin)=2, prop=argin1; val=argin2; argin=argin(3:end); switch prop case x d.x=val; case y d.y=val; otherwise error(Asset properties:x,y); endend %prod.mfunction z=prod(d)z=d.x*d.y;(3) 在MATLAB命令行中进行如下操作:cd E:MyProgrammatlab7chap4d = list(11,22)list class:x=11y=22prod(d) ans =242d = set(d,x,7);get(d,x)ans =7prod(d)ans =154下面对操作步骤中的细节加以详细解释。1. 类的创建创建一个新的类,首先需要在构造函数中用结果类型struct建立一个结构变量,包含所需要的成员变量。注意,这里不用考虑成员函数。然后用class命令将七转换成类,并返回。class明年的语法很简单:类变量 = class(结构变量,类名);这里类名和构造函数名相同。程序中要创建这个类的新的变量时,只需调用其构造函数,返回的变量就属于这个类的了。当然,这里的list.m太过简单,没有任何变量检查,使用中还可以根据情况添加一些扩充功能。2. 类成员变量的赋值本例中,类的成员变量是在构造函数中赋值的。MATLAB中,类成员变量都是private的,必须在成员函数中访问,因此就不能箱struct那样,用d.x和d.y等形式访问其成员变量了。不过,这个问题不严重,编个专门的成员函数get就行了。另外,成员函数的调用有个跟普通的函数一样。注意在get和set函数中,成员变量是以字符串的形式指定的,要通过字符串比较的办法进行区分,然后对输出变量进行赋值。本例中的set函数支持同时对两个成员变量赋值,因此用到了不定长输入产生表varargin,例如:d = set(d,x,12) % 只对其中一个成员变量赋值list class:x=12y=22d = set(d,x,23,y,34) % 同时对两个成员变量赋值list class:x=23y=343. 成员变量的显示成员被变量display不是必须的,不过她可以显示类的有用信息。如果在命令行上输入一个类变量,不加分号就回车,这时其display函数就自动调用。在该函数中,可以显示任何与该类信息相关的信息,当然也可以是不相关的。4. 工作目录一个工作目录吓可以仿真多个类目录。通常可以把大程序按功能分开,用类重新组织起来,使程序更具有结构化,增强其可读性。4.4.2 在类中引用方法1 实现方法函数类的方法(class methods)是指M文件编写的以类的对象作为输入产生的函数。一个特定的类的方法通常要保存在这个类的目录中。如上一小节中 list 的方法函数存储在 list路径下。对方法汗的调用方式和对普通函数的调用方式是相同的,其命令格式为:输出1,输出2, = 方法名称(对象名,参数1,参数2,);但是必须注意,方法函数中如果对类的成员变量进行了改变,就必须将改变后的类变量作为输出变量返回,否则在原工作空间中的类变量的成员变量不能得到更新。例如:d = list(10,20);set(d,x,23,y,34);dlist class:x=10y=20可以看到,调用set函数而不将返回结果重新赋值给d,着d的x和y两个成员变量仍然保持原来的数值。2 私有方法私有方法是指只能被同类的其他方法所调用的方法,其对应的M文件存在类目录的private子目录下。例如,如果list类有私有方法,就应该将它们保存在list/private目录下。私有方法的作用域子限于list这个类中,而不能够被MATLAB命令行调用,或者被上一层类的方法调用。3 辅助函数在设计类的时候,有些工作需要由;一些特定的函数来完成,但这些函数并不一定直接对类的对象操作,这些函数通常被称为辅助函数(helper funtions)。辅助函数可以是类方法文件中的一个子函数,也可以是一个独立的私有函数。4 类方法的调用在MATLAB中,可以采用与调试程序相同的命令对类方法进行调试,唯一不同的是对类方法的调试必须下命令行中添加类的路径。例如使用dbstop命令(停止调试)对display进行调试的时候,需要用如下的命令:dbstop list/display当然,也可以在M文件编辑/调试器中直接设置断点进行调试。4.4.3 类的继承和集成MATLAB中的类对象可以集成其他类对象的属性,当一个子类从父类中继承了属性后,在子类中将包括父类的所有成员和方法,父类的方法也可以使用之类继承的法拉国防。继承的概念是面向对象编程中的一个重要特性,子类可以很方便的引用父类中已经定义的方法。类的继承由两种方式:简单继承和多重继承。类集成的概率有点类似于嵌套,是指类对象的域中包括另外一个对象的情形。1. 简单继承简单继承是指子类从一个父类继承属性,子类中也包括它自己的一些新的属性。对于父类的操作可以应用到子类上来,而对于子类中不属于父类的方法则不可以应用到父类上去。通常可以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年环保科技实习生入职协议:环保设备设计专业就业合同
- 2025年网红KTV酒吧经营管理权及品牌特许经营合同
- 2025年度高效农业草牧场承包及全方位农村金融服务合同规范
- 2025年城市公共交通车辆租赁运营合同
- 2025年度城市住宅转租安全保障协议
- 2025网红品牌专卖店租赁协议及形象合作合同
- 2025年校园食堂食材供应与安全保障服务协议
- 2025年城市配送中心装卸操作与信息化服务合作协议
- 2025年城市绿化景观提升项目承包合同范本
- 2025生物医疗信息互通技术服务合同范本
- 2025年教科版新教材科学三年级上册全册教案设计(含教学计划)
- 医院药品采购与质量控制规范
- 支部纪检委员课件
- 枣庄学院《图学基础与计算机绘图》2024-2025学年第一学期期末试卷
- 2025版仓储库房租赁合同范本(含合同生效条件)
- GB 46031-2025可燃粉尘工艺系统防爆技术规范
- 2025至2030年中国纳米抛光浆料行业发展监测及发展趋势预测报告
- 养老护理员培训班课件
- 2025-2030城市矿产开发利用政策支持与商业模式创新报告
- 隔爆水棚替换自动隔爆装置方案及安全技术措施
- 医学减重管理体系
评论
0/150
提交评论