首页 > 代码库 > 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 的子目录写法