Matlab class文件 简单上手使用

    技术2022-07-11  96

    1.简单的书写规范

    一般通过软件(拓展)新建功能,可以选择新建一个脚本、函数或者是类。当然文件中以类的形式书写代码,保存后matlab将自动识别该文件为类。 当使用软件新建类后,新建的文件中包含了类文件的基础格式(我使用的软件是MATLAB R2014b):

    classdef Untitled3 %UNTITLED3 此处显示有关此类的摘要 % 此处显示详细说明 properties end methods end end

    classdef 定义的是 类名,一般要求与文件名一致。类名 与 关键字之间,可以加括号(内填参数),规定是否为抽象类、是否允许继承、是否被子类可以继承、是否有构造函数等等。当然这也是选填内容,默认的选择都是开放易用型的。 properties [类的] 属性,关键字后,可以加括号(内填参数),规定成员变量的是否公私有(Access=public\private)、创建观测(GetObservable=false\true)、对成员访问权限(GetAccess、SetAccess=public\private?=另外一个类名)。可以有多个(如两个 属性 结构),用以分开定义常量、变量。

    methods 方法,书写结构类似于前。关键字后,可以加括号(内填参数),规定成员方法的是否公私有、抽象、静态等 下面是没有看懂,但是有用的功能:

    使用属性set方法来验证分配给属性的值。 属性set方法可以执行诸如对输入值进行错误检查之类的操作,然后再采取任何必要的操作来存储新的属性值。

    值类设置函数必须将修改后的对象返回给调用函数。 处理类不需要返回修改后的对象。

    methods 下就可以以函数的形式书写方法了。

    methods function obj=minus(obj,a) obj.x=a; end function a=ad(~,s) s=s-1; a=1000+s; end end

    一般的,methods 下要包含构造方法(也可以省略不写),构造方法要求方法名字与类名一致,常用于接收,外界传递给 类 的参数。

    properties x y end methods function obj=classTest(a,b) //classTest 指类名 obj.x=a; obj.y=b; end end

    此外,还有暂时不做过多的介绍。 events 类事件EventName

    end

    enumeration 类列举EnumName

    end 在对类的存放上,可以将类(如 classTest ),存放在@开头的名字为类名的文件夹中(如 @classTest ),matlab会将整个文件夹视为该类整体,文件夹外对该类进行访问。也可以将类中的某些方法独立出来,形成函数文件存放在该文件夹中。如以 examp 类为例,独立出类函数 prod。

    2.对其访问

    一般的,matlab对此要求的不是很严,在同一目录下,当上述采用默认的限制(成员变量、方法均为公有),在静方法中:脚本可以不实例化类,而使用类名直接访问类内成员,直接使用名字即可。

    也可以使用:类名.成员 的方式(成员包括成员变量、成员函数),访问类内成员。

    t= classTest(1,3); //类实例化为对象class_one minus(t,456); //对成员方法访问 调用方式一 t.minus(5); //访问类内成员方法(class的static function可以在 //不定义类的实例直接调用类的成员函数)调用方式二 t=t.minus(456); //重新对类的x赋值(函数实现,见上述函数) t.x ; //访问类内成员变量

    当方法为静态时: methods (Static) ,函数(方法)的书写可以不带参数,甚至第一个 obj、~ 参数都不需要带,(当然也可以加上自己想要的参数)。访问时采用调用方式二。

    methods (Static) function num = getEmpNumber num = 5 + 3; end end >> t.getEmpNumber ans = 8

    3.错误

    1. 错误原因:代码中类名填写错误,该类是 classTest,但误用 MyClass 类。 2. 明明已经写上了 getEmpNumber 静态方法,dan却提示上述错误。 错误原因:t 对象是很久之前实例化的,新添加的 getEmpNumber 无法更新到旧的对象中,我们需要重新实例化t对象 t=classTest(1);, 再次调用该方法,错误解决。 3. 错误原因:[1]可能是你的参数真的太多,如上图后者。[2]也可能是是写函数时候(特别是默认的函数,没有指明静态),参数的第一个不是 obj 、~ ,这就造成你这个函数调用的时候出问题。添加第一参数,调用时用正常的调用code即可。

    4.引用

    1.https://blog.csdn.net/qinze5857/article/details/80545885 2.https://blog.csdn.net/beechina/article/details/50933860 3.https://blog.csdn.net/qinze5857/article/details/79975095?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase 4.https://blog.csdn.net/luolang_103/article/details/83268433?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase 5.https://ww2.mathworks.cn/help/matlab/object-oriented-programming.html?category=object-oriented-programming&s_tid=CRUX_gn_documentation_object-oriented-programming 6.https://ww2.mathworks.cn/help/matlab/matlab_oop/events-and-listeners-syntax-and-techniques.html#bu6sj1o-1

    Processed: 0.010, SQL: 9