matlab 类 |
您所在的位置:网站首页 › matlab创建文件夹命令 › matlab 类 |
一个类应该包含四个基本的成员函数: 构造函数 ――与类名相同,可以在其中完成成员初始化的工作;在构造函数中给属性赋值 显示函数 ――名为display,用于显示成员的数据;如果在命令行上输入一个类变量,不加分号就回车,这时其display函数就自动调用。 赋值函数 ――名为set,用于设置类成员的数值; 取值函数 ――名为get,用于读取类成员的函数。 在Constructor中也可以给对象的属性赋值。即使在property block中已经提供了默认值,Constructor中赋的新值也将取代property block中的默认值。 MATLAB在声明一个对象时的工作顺序是:先装载类的定义,然后再调用构造函数,这时属性被重新赋值。 由于MATLAB是弱类型检查的解释性语言,不能通过函数函数重载的方式找到相匹配的函数,但是可以通过参数数目(nargin)的不同来选择不同的代码。 classdef Point2D < handle properties x=cos(pi/2); %Constructor被调用之前x的默认值 y=sin(pi/3); %Constructor被调用之前y的默认值 end methods function obj = Point2D(x0,y0) if nargin == 0 % 如果没有提供参数 obj.x=cos(pi/2); obj.y=sin(pi/3); else if nargin == 2 %如果提供了参数 obj.x=x0; obj.y=y0; end end end endclassdef是类定义关键字其语法为classdef … end classdef ClassName,是类定义的开始,只有空白行和注释可以位于classdef的前面。 classdef (ClassAttributes) ClassName < SuperclassName %开始类定义 properties (Attributes) %开始属性定义块 PropertyName PropertyName size class {validation functions} end %终止属性定义块 methods (Attributes) %开始方法定义块 function obj = methodName(obj,arg2,...) ... end end %开始方法定义块 events (Attributes) %开始事件定义块 EventName end %开始事件定义块 end %中止类定义 classdef (Attributes) ClassName < SuperclassName %开始类定义 enumeration %开始枚举定义 EnumName end %中止枚举定义 end %中止类定义类定义要保存在与类名称相同的文件中(文件拓展名为.m)。 类名称要以字母开头,可以包含字母、数字或下划线。 类定义文件可以位于 MATLAB 路径上的文件夹中,也可以位于父文件夹在 MATLAB 路径上的类文件夹中。类文件夹名称以 ‘@’ 字符开始,后跟类名称(例如 @MyClass)。 %作目录上建立一个子目录: cd E:MyProgrammatlab7chap4 mkdir @list%对于这样形式的目录里所有保存的M文件,MATLAB都认为是类的成员函数一个工作目录下可以访问多个类目录。通常可以把大程序按功能分开,用类重新组织起来,使程序更具有结构化,增强其可读性。 ClassAttributes类的属性类属性不能被继承,所以父类的属性不会影响到子类。在括号中指定属性值,多个属性之间采用逗号分隔,如:classdef (Attribute1 = value1, Attribute2 = value2,…) ClassName … endSuperClass为继承的类名字,如果要继承多个类,类与类之间用&连接。 当一个子类从父类中继承了属性后,在子类中将包括父类的所有成员和方法,父类的方法也可以使用。 属性特性 Attributes类定义可以包含多个属性定义块,每个块指定不同的属性设置,这些设置适用于该特定块中的属性。 注意:属性不能与类使用相同的名称。 属性特性的目的 在类定义中指定特性使您能够为特定目的自定义属性的行为。通过设置特性来控制属性的特征,例如访问权限、数据存储和可见性。子类不继承超类成员特性。 指定属性特性 在 properties 关键字的同一行为属性特性赋值 properties (Attribute1 = value1, Attribute2 = value2,...) ... end properties (Access = private)%对 Data 属性给予 private 访问权限 Data end 属性特性表特性值 指定特性值时,这些值会影响在定义代码块中定义的所有组件。例如,以下属性定义代码块会进行如下设置: 将 AccountBalance 属性的 SetObservable 特性设置为 true 将 SSNumber 和 CreditCardNumber 属性的 Hidden 特性设置为 true,将 SetAccess 特性设置为 private。 用不同的特性设置定义属性需要多个 properties 代码块。 方法methods, 开始方法定义块; end 关键字终止 methods 块。 此块包含实现类方法的函数。 类定义可以包含多个方法块,每个块指定不同的属性设置,这些设置适用于该特定块中的方法。可以在单独的文件中定义方法函数。一个特定的类的方法通常要保存在这个类的目录中。 方法函数中如果对类的成员变量进行了改变,就必须将改变后的类变量作为输出变量返回,否则在原工作空间中的类变量的成员变量不能得到更新。 私有方法私有方法是指只能被同类的其他方法所调用的方法,其对应的M文件存在类目录的private子目录下。例如,如果list类有私有方法,就应该将它们保存在@list/private目录下。私有方法的作用域子限于list这个类中,而不能够被MATLAB命令行调用,或者被上一层类的方法调用。 类方法的调用在MATLAB中,可以采用与调试程序相同的命令对类方法进行调试,唯一不同的是对类方法的调试必须下命令行中添加类的路径。例如使用dbstop命令(停止调试)对display进行调试的时候,需要用如下的命令: dbstop @list/display类的成员变量是在构造函数中赋值的。MATLAB中,类成员变量都是private的,必须在成员函数中访问。在get和set函数中,成员变量是以字符串的形式指定的,要通过字符串比较的办法进行区分,然后对输出变量进行赋值。本例中的set函数支持同时对两个成员变量赋值,因此用到了不定长输入产生表varargin。 枚举类通过向类定义中添加 enumeration 代码块可创建枚举类。 classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end end使用类名和成员名引用枚举成员:ClassName.MemberName 例如,将枚举成员 WeekDays.Tuesday 赋给变量 today: today = WeekDays.Tuesday;today 是 WeekDays 类的变量 在枚举类中定义方法 在枚举类中定义方法的方式与在任何 MATLAB 类中的定义方式一样。例如,下面是 WeekDays 类,其中添加了名为 isMeetingDay 的方法: classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end methods function tf = isMeetingDay(obj) tf = ~(WeekDays.Tuesday == obj); end end end使用 WeekDays 类的实例调用 isMeetingDay: today = WeekDays.Tuesday; today.isMeetingDay ans =0 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |