matlab中的类定义classdef

格式

classdef (attribute = value) ClassName < Superclass

end

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

Attributes

NameClassDescription
Hiddenlogical在matlab输出中不显示该类
InferiorClassescell, 即{}在类中建立优先关系
ConstructOnLoadlogical当从mat文件中装载对象时调用class constructor
Sealedlogicaltrue则无法创建子类
InferiorClasses
classdef (InferiorClasses = {?class1, ?class2}) myClass

end

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

ConstructOnLoad

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

文件组织方法

法一
不使用文件夹,直接创建和类同名的文件。
图1 一个文件夹下可以放多个类文件
法2
使用文件夹需要加上@,并且每个文件夹包含和文件夹名称相同的类的定义和函数。必须包含和文件夹名称相同的类.m文件。
图2 混合放置
法3
打包成为package,需要使用命名空间。package文件夹以+开头命名。
图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面向对象编程——从入门到设计模式》

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值