Matlab中如何编写一个类?
-- by benbenknight
Matlab中类的编写比较有特色,需要按如下几步进行:
(1)为类建立一个目录
以类MyClass,目录名为@MyClass。
(2)定义构造函数
在@MyClass目录下建立文件MyClass.m,代码清单如下:
---------------------------------------------------
function a = MyClass(varargin)
% MYCLASS 类MyClass的构造函数
%
% a = MyClass
% 定义类MyClass的一个对象a
% a = MyClass(b)
% 定义类MyClass的一个对象a,并将类MyClass的对象b赋值给a
% 实际上,也可用简单方法a=b来实现这一功能。
%
% by benbenknight
switch nargin
case 0
a.x= 0; %
类的一个数据成员
a =
class(a,'MyClass');
case 1
if
isa(varargin{1},'MyClass')
a = varargin{1};
else
error('MyClass: Wrong argument type')
end
otherwise
error('MyClass: Wrong number of input arguments')
end
---------------------------------------------------
(3)定义数据成员取值函数
在@MyClass目录下建立文件subsref.m,代码清单如下:
---------------------------------------------------
function b = subsref(a,index)
% SUBSREF 类MyClass的数据成员取值函数
%
% b = a.x
% 将类MyClass的对象a的成员变量x赋值给b
%
% by benbenknight
switch index(1).type
case '.'
switch
index(1).subs
case 'x'
b = a.x;
otherwise error('MyClass: undefined field');
end
otherwise
error('MyClass: undefined field');
end
---------------------------------------------------
(4)定义数据成员赋值函数
在@MyClass目录下建立文件subsasgn.m,代码清单如下:
---------------------------------------------------
function a = subsasgn(a,index,val)
% SUBSASGN 类MyClass的数据成员赋值函数
%
% a.x = val
% 将b赋值给类MyClass的对象a的成员变量x
%
% by benbenknight
switch index(1).type
case '.'
switch
index(1).subs
case 'x'
a.x = val;
otherwise error('MyClass: undefined field');
end
otherwise error('MyClass: undefined field');
end
---------------------------------------------------
(5)定义显示函数
在@MyClass目录下建立文件display.m,代码清单如下:
---------------------------------------------------
function display(p)
% DISPLAY 类MyClass的显示函数
%
% by benbenknight
disp(struct(p))
---------------------------------------------------
(6)写一个测试脚本
在某个Matlab能搜索到的目录下建立文件test_myclass.m,代码清单如下:
---------------------------------------------------
% test_myclass.m
a = MyClass; % 构造函数
a.x = 1; % 赋值函数
b = a.x; % 取值函数
a % 显示函数
---------------------------------------------------
(7)为类增加其他成员函数。
在目录@MyClass下建立相应的文件,同时修改测试脚本进行测试。
至此,类MyClass编写完毕。