首页 > 代码库 > matlab 类 class 的子目录写法
matlab 类 class 的子目录写法
首先回顾下类定义
(1)matlab类框架,一般如下
classdef (attributel =value1,attribute2=value2,...)classname(<superclass_name)
properties
proName
end
methods
methodName
end
events
EventName
end
end
更加详细的内容:http://cn.mathworks.com/help/matlab/matlab_oop/class-attributes.html
注意:类名必须要与文件名相同,第一个括号中声明类的属性,具体如下:
Attribute Name class Description
Abstract (抽象类) logical (默认情况为false)如果设置为true,则这是一个虚基类(不能被实例化)
AllowedSubclasses meta.class 对象或者元胞 一个单meta.class 对象
ConstructOnLoad logical (默认情况为false) 如果为true,Matlab将会重新加载这个类。
Sealed logical(默认情况为false) 如果为ture,那么这个类将无法被继承。
在MATLAB中,为了更好地进行数据的封装,更加抽象地描述对象,也定义了类。一种是用classdef定义的,用起来还行,就是函数多了看起来很乱,另外一种是一个函数一个文件,优点是便于管理。
通常一个类应该包含四个基本的成员函数:
构造函数 - 与类名相同,可以在其中完成成员初始化的工作;
显示函数 - 函数名为display,用于显示成员的数据;
赋值函数 - 函数名为set,用于设置类成员的数值;
取值函数 - 函数名为get,用于读取类成员的函数。
一个简单的例子,代码如下:
注意:在工作目录上建立一个子目录@list,类名前面要加上一个字符@,对于这样形式的目录里所有保存的M文件,MATLAB都认为是类的成员函数。
set.m
% set.m % function d = set (d,varargin)% argin = varargin; while length(argin)>=2, prop = argin{1}; val = argin{2}; argin = argin(3:end); switch prop case 'x' d.x = val; case 'y' d.y = val; otherwise error('Asset properties:x,y'); end end
prod.m
% % function z = prod(d) z = d.x * d.y;
list.m
% % function d = list(x,y) d.x = x; d.y = y; d = class(d,'list');
get.m
% % % function val = get(d,prop_name) switch prop_name case 'x' val = d.x; case 'y' val = d.y; otherwise error([prop_name,'is not a valid list property']); end
display.m
% % function display(d) fprintf('list class :\n'); fprintf('x = %d\n',d.x); fprintf('y = %d\n',d.y);
结果:
>> d=list(11,22) list class : x = 11 y = 22 >> prod(d) ans = 242 >> get(d,'x') ans = 11 >> get(d,'y') ans = 22 >> prod(d) ans = 242
matlab 类 class 的子目录写法