QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5950|回复: 4
打印 上一主题 下一主题

MATLAB中的类

[复制链接]
字体大小: 正常 放大

7

主题

4

听众

64

积分

升级  62.11%

  • TA的每日心情
    开心
    2012-11-8 18:05
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    跳转到指定楼层
    1#
    发表于 2012-3-30 11:17 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    如何在MATLAB中定义类?
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    857

    主题

    21

    听众

    1598

    积分

  • TA的每日心情
    开心
    2012-7-27 21:03
  • 签到天数: 99 天

    [LV.6]常住居民II

    群组第二届数模基础实训

    群组Matlab讨论组

    通常一个类应该包含四个基本的成员函数:
    构造函数 ―― 与类名相同,可以在其中完成成员初始化的工作;
    显示函数 ―― 名为display,用于显示成员的数据;
    赋值函数 ―― 名为set,用于设置类成员的数值;
    取值函数 ―― 名为get,用于读取类成员的函数。
        与C++的类不同的是,MATLAB的类不需要特别的析构函数。如果类用到了一些特殊的内容需要释放的话,可以编写一个成员函数,比如classclear,用包来释放所占用的资源。
    下面用一个简单的例子类介绍一些类如何使用。定义一个名为list的类,它有两个数据成员x和y,希望通过一个成员函数prod()来获取x和y的乘积。本例的类是这样的:
    类名:     list
    成员变量:x,y
    成员函数:
    list:构造函数
    display:显示函数
    get:取值函数
    set:赋值函数
    prod:计算函数现在就来建立它。
    (1)  在工作目录上建立一个子目录:
    cd E:\MyProgram\matlab7\chap4
    mkdir @list
    类名前面要加上一个字符'@’,对于这样形式的目录里所有保存的M文件,MATLAB都认为是类的成员函数。
    (2)  编写5个成员函数的M文件保存在E:\MyProgram\matlab7\chap4\@list 目录下:
    % list.mfunction d = list(x,y)
    d.x=x;
    d.y=y;
    d=class(d,'list');  
    % display.mfunction display(d)
    fprintf('list class:\n');
    fprintf('x=%d\n',d.x);
    fprintf('y=%d\n',d.y);  
    % get.mfunction 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  
    %set.mfunction 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');   
    endend  
    %prod.mfunction z=prod(d)z=d.x*d.y;  
    (3)  在MATLAB命令行中进行如下操作:
    cd E:\MyProgram\matlab7\chap4 d = list(11,22) list class:x=11y=22 prod(d)   ans =242 d = set(d,'x',7);get(d,'x') ans =7 prod(d) ans =154
    下面对操作步骤中的细节加以详细解释。
    1.  类的创建创建一个新的类,首先需要在构造函数中用结果类型struct建立一个结构变量,包含所需要的成员变量。注意,这里不用考虑成员函数。然后用class命令将七转换成类,并返回。
    class的语法很简单:类变量 = class(结构变量,'类名');
        这里类名和构造函数名相同。程序中要创建这个类的新的变量时,只需调用其构造函数,返回的变量就属于这个类的了。当然,这里的list.m太过简单,没有任何变量检查,使用中还可以根据情况添加一些扩充功能。
    2.  类成员变量的赋值本例中,类的成员变量是在构造函数中赋值的。MATLAB中,类成员变量都是private的,必须在成员函数中访问,因此就不能箱struct那样,用d.x和d.y等形式访问其成员变量了。不过,这个问题不严重,编个专门的成员函数get就行了。另外,成员函数的调用有个跟普通的函数一样。注意在get和set函数中,成员变量是以字符串的形式指定的,要通过字符串比较的办法进行区分,然后对输出变量进行赋值。本例中的set函数支持同时对两个成员变量赋值,因此用到了不定长输入产生表varargin,例如:d = set(d,'x',12) % 只对其中一个成员变量赋值 list class:x=12y=22 d = set(d,'x',23,'y',34) % 同时对两个成员变量赋值 list class:x=23y=34
    3.  成员变量的显示成员被变量display不是必须的,不过她可以显示类的有用信息。如果在命令行上输入一个类变量,不加分号就回车,这时其display函数就自动调用。在该函数中,可以显示任何与该类信息相关的信息,当然也可以是不相关的。
    4.  工作目录一个工作目录吓可以仿真多个类目录。通常可以把大程序按功能分开,用类重新组织起来,使程序更具有结构化,增强其可读性。
    论坛上有很多matlab的书,你可以去看看!!
    回复

    使用道具 举报

    7

    主题

    3

    听众

    320

    积分

  • TA的每日心情
    奋斗
    2013-2-5 00:26
  • 签到天数: 57 天

    [LV.5]常住居民I

    群组2012第三期美赛培训

    回复

    使用道具 举报

    7

    主题

    3

    听众

    320

    积分

  • TA的每日心情
    奋斗
    2013-2-5 00:26
  • 签到天数: 57 天

    [LV.5]常住居民I

    群组2012第三期美赛培训

    回复

    使用道具 举报

    2

    主题

    8

    听众

    84

    积分

    升级  83.16%

  • TA的每日心情

    2013-2-16 14:17
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    自我介绍
    数模
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-26 00:52 , Processed in 0.586448 second(s), 72 queries .

    回顶部