首先回顾下类定义
(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
% % function z = prod(d) z = d.x * d.y;
% % function d = list(x,y) d.x = x; d.y = y; d = class(d,'list');
%
%
%
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
%
%
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
原文地址:http://blog.csdn.net/u013476464/article/details/42145681