matlab中的类定义classdef

格式

classdef (attribute = value) ClassName < Superclass

end

定义多个attribute时,在括号中用逗号隔开。

Attributes

Name Class Description
Hidden logical 在matlab输出中不显示该类
InferiorClasses cell, 即{} 在类中建立优先关系
ConstructOnLoad logical 当从mat文件中装载对象时调用class constructor
Sealed logical true则无法创建子类

InferiorClasses

classdef (InferiorClasses = {?class1, ?class2}) myClass

end

?classname定义了一个meta.class对象
该属性用于建立自定义的优先关系。
但是matlab的内置类优于用户自定义类。

ConstructOnLoad

ConstrucOnLoad调用的class constructor是无参数的。需要参数的话,在类中添加方法loadobj。
超类的attribute无法继承,不会影响到子类。

文件组织方法

法一
不使用文件夹,直接创建和类同名的文件。
matlab中的类定义classdef_第1张图片
法2
使用文件夹需要加上@,并且每个文件夹包含和文件夹名称相同的类的定义和函数。必须包含和文件夹名称相同的类.m文件。
matlab中的类定义classdef_第2张图片
法3
打包成为package,需要使用命名空间。package文件夹以+开头命名。
matlab中的类定义classdef_第3张图片

package说明

package相当于定义了命名空间。

  • 查看package下的文件内容:
what Packagename
  • 调用package下的内容
z = mypack.myfunc(x, y)
obj = mypack.myclass(arg1, arg2, ...)
obj.mymethod(arg)
mymethod(obj, arg)
mypack.myclass.staticmethod(arg)

必须放在classdef文件中的内容

class constructor
delete方法
名字中有.的函数:converter methods以及property set and get access methods。

定义子函数

在classdef - end块之外定义的函数称为subfunction。这些函数可以在文件的任何部分中调用,但是文件外不可以。
函数可以返回该类的某些属性,但不是必要的,因此不放在classdef中。

classdef NewClass

end
function x

end

Debug方法

统一采用path separator
编辑类文件
edit +Pack/@classpath/classpath
编辑类函数
edit +Pack/@classpath/classfunc

dbstop

修改或删除class

创建class时,MATLAB将它的定义一次性装入内存,如果类定义改变时,需要先清除旧的对象。

clear obj

也可以采用clear classes一次性清除。

情况比较复杂。clear classes在以下情况中需要注意:

  1. 含有实例的类不能被删除
  2. 使用clear obj命令删除实例
  3. 采用persistent variable保护objects。需要删除时,如果persistent variable在函数中,需要先mlock函数,再clear functions删除函数,最后删掉class。
  4. 对于默认property value,载入类时matlab会存储其值,需要clear classes删掉他。
  5. 类似的,属性Constant = true的property,类需要clear classes.

来源于MATLAB OOP文档以及《MATLAB面向对象编程——从入门到设计模式》

你可能感兴趣的:(Matlab,matlab)