matlab 类

您所在的位置:网站首页 matlab创建文件夹命令 matlab 类

matlab 类

#matlab 类| 来源: 网络整理| 查看: 265

一个类应该包含四个基本的成员函数:

构造函数 ――与类名相同,可以在其中完成成员初始化的工作;在构造函数中给属性赋值

显示函数 ――名为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 … end

SuperClass为继承的类名字,如果要继承多个类,类与类之间用&连接。

当一个子类从父类中继承了属性后,在子类中将包括父类的所有成员和方法,父类的方法也可以使用。

属性特性 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