《基于MATLAB的数据结构与算法线性表部分.ppt》由会员分享,可在线阅读,更多相关《基于MATLAB的数据结构与算法线性表部分.ppt(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于MATLAB数据结构与算法延边大学 信息管理专业(13级)崔基哲MATLAB类的定义类的定义Class创建举例创建举例用用class创建双向链表创建双向链表线性表部分的线性表部分的 MATLAB MATLAB编程编程类的建立:class类的建立:class1.1 类类文件文件夹夹当要创建一个类时,我们应该将确认类文件放在什么位置。matlab为我们提供了两种方法:1.在在matlab路径下路径下创创建一个文件建一个文件夹夹,然后在文件,然后在文件夹夹中中创创建一个建一个单单独的独的自包含的自包含的类类定定义义2.在在matlab路径下,路径下,创创建一个建一个+类类名的文件名的文件夹夹,在
2、其中,在其中创创建一个建一个类类,同,同时时我我们们可以将可以将类类的定的定义义分散在多个文件中,也即分散在多个文件中,也即该该文件文件夹夹下下都是都是该类该类的定的定义义;和其他高级语言(java)类似,matlab还允许我们将这些类组织成包包为packages包文件夹的父文件夹必须在matlab路径下,但是包文件夹不必。包文件夹以+开头,可以包含多个类定义或者其他的包。一个包文件夹定义了一个新的命名空间,所以我们可以重用类名。引用包中的类或者函数时需要包含包名称,例如packagefld1.ClassNameA(),packagefld2.packageFunction()。其他更多 Cl
3、ass Folders更多细节可参考matlab帮助中的Class Folders部分(在搜索框中输入Class搜索)。1.2 类类定定义义 要创建一个类,matlab会自动帮我们生成一个类框架,一般如下:classdef(attribute1=value,.)classname(superclass_name)propertiesPropName endmethodsmethodName end eventsEventName endendClass的定义方法 类名必须要与文件名相同,第一个括号中声明类的属性,类似于java中的public等关键词,更详细的解释可参考:Class Attri
4、butes。第二个括号指明类是否需要继承父类,类似于java中的extends关键字或者C+中的:。matlab支持多重继承,更详细的解释可参考:Creating Subclasses Syntax and Techniques。在实现链表的过程中,我们需要继承handle类。完整的一个类模块如下图:完整的一个类模块如下图关于classdef与handleclassdef是定义类名,后面的=2,prop=argin1;val=argin2;argin=argin(3:end);switch propcase xd.x=val;case yd.y=val;otherwiseerror(Asset
5、 properties:x,y);endend 举例:建立一个类第三步:在MATLAB命令行中进行如下操作:cd E:MyProgrammatlab7chap4 d=list(11,22)list class:x=11y=22 prod(d)ans=242 d=set(d,x,7);get(d,x)ans=7 prod(d)ans=154 举例:创建类类成员变量的赋值本例中,类的成员变量是在构造函数中赋值的。MATLAB中,类成员变量都是private的,必须在成员函数中访问,因此就不能箱struct那样,用d.x和d.y等形式访问其成员变量了。访问时编个专门的成员函数get就行了。另外,成员
6、函数的调用跟普通的函数一样。注意在get和set函数中,成员变量是以字符串的形式指定的,要通过字符串比较的办法进行区分,然后对输出变量进行赋值。本例中的set函数支持同时对两个成员变量赋值,因此用到了不定长输入产生表varargin,例如:d=set(d,x,12)%只对其中一个成员变量赋值 list class:x=12y=22 d=set(d,x,23,y,34)%同时对两个成员变量赋值 list class:x=23y=34 在类中引用方法:实现方法函数类的方法(class methods)是指M文件编写的以类的对象作为输入产生的函数。一个特定的类的方法通常要保存在这个类的目录中。如上一
7、小节中 list 的方法函数存储在 list路径下。对方法汗的调用方式和对普通函数的调用方式是相同的,其命令格式为:输出1,输出2,=方法名称(对象名,参数1,参数2,);但是必须注意,方法函数中如果对类的成员变量进行了改变,就必须将改变后的类变量作为输出变量返回,否则在原工作空间中的类变量的成员变量不能得到更新。例如:d=list(10,20);set(d,x,23,y,34);d list class:x=10y=20 可以看到,调用set函数而不将返回结果重新赋值给d,着d的x和y两个成员变量仍然保持原来的数值。在类中的引用方法:私有方法私有方法是指只能被同类的其他方法所调用的方法,其对
8、应的M文件存在类目录的private子目录下。例如,如果list类有私有方法,就应该将它们保存在list/private目录下。私有方法的作用域子限于list这个类中,而不能够被MATLAB命令行调用,或者被上一层类的方法调用。类的继承和集成 MATLAB中的类对象可以集成其他类对象的属性,当一个子类从父类中继承了属性后,在子类中将包括父类的所有成员和方法,父类的方法也可以使用之类继承的法拉国防。继承的概念是面向对象编程中的一个重要特性,子类可以很方便的引用父类中已经定义的方法。类的继承由两种方式:简单继承和多重继承。类集成的概率有点类似于嵌套,是指类对象的域中包括另外一个对象的情形。1.简单
9、继承简单继承是指子类从一个父类继承属性,子类中也包括它自己的一些新的属性。对于父类的操作可以应用到子类上来,而对于子类中不属于父类的方法则不可以应用到父类上去。通常可以使用class函数来实现类的继承。子类对象名=class(子类对象名,子类类名,父类对象名);2.多重继承多重继承是指子类从多于一个父类中继承属性。子类中包含所有从父类中继承来的属性,还包括它自己的属性。3.类的集成类的集成是指一个类可以把另外的类作为自己的一个成员变量。被嵌入的类对象的方法函数值能通过外层对象的方法函数调用。定义类的好处使用类(class)有很多好处,其中一个重要的好处便是解决变量名冲突和让函数、对象的结构清晰
10、。class的staticfunction可以在不定义类的实例直接调用类的成员函数,比如定义classdef tools 0);%Find nonzero strain ind=find(td.Strain 0);%Find nonzero strain m=mean(td.Stress(ind)./td.Strain(ind);m=mean(td.Stress(ind)./td.Strain(ind);end%CalcModulus endend%CalcModulus end上述代码中的最后一个方法methods(Access=private)中的Access=private表示该方法仅能被类本身访问和修改,是个私有成员方法。其中属性Access又可分为SetAccess和GetAccess,属性值和Access相同。