13,matlab中的 classdef定义类的使用

缘由:

今天偶然看了一个matlab的代码,然后发现自己都不清楚怎么运行,在运行主函数的时候会出现Undefined variable ***“”

不懂是怎么回事,就想尝试找源头一个一个的看关联函数,但是没有成功。 

然后就看发现一个自己之前没见过的“classdef  ”

(1) help classdef

classdef classname begins the class definition and an end keyword terminates the classdef block. Only blank lines and comments can precede classdef. Enter a class definition in a file having the same name as the class, with a filename extension of .m.

Class definition files can be in folders on the MATLAB® path or in class folders whose parent folder is on the MATLAB path. Class folder names begin with the '@' character followed by the class name (for example,@MyClass). For more information on class folders, see Class Files and Folders .

For more information on classes, see Classdef Block and Class Definition .

properties begins a property definition block, an end keyword terminates the properties block. Class definitions can contain multiple property definition blocks, each specifying different attribute settings that apply to the properties in that particular block.

(2)百度

 链接: Matlab编程中使用类_凤凰族_凤凰族的和讯博客 http://phenixfamily.blog.hexun.com/79855249_d.html

 Matlab中创建类的方法有两种:

    1、使用单一的m文件。把类的定义和类方法的实现都放在一个m文件中,用类的名字命名文件,即"类名.m"。这样的实现方法与C++、java等常用编程语言相似,我本人也倾向于这种方法。

    2、使用@文件夹。建立一个文件夹,命名的方式是“@类名”。所有的类定义及方法文件都放在这个目录下,类的方法可以使用单独的文件,用方法名来命名。这种方法是Matlab早期版本的类实现方法,现在新的版本下面也支持这种方式。

   自己动手-----New-->Class---> 定义

第一种使用:单个文件----classExample

类文件classExample.m 代码: 

classdef classExample
    %UNTITLED Summary of this class goes here
    %   Detailed explanation goes here  详细解释如下
    
    properties               %定义属性---类变量
        x
        y
    end
    properties (Constant)    % 定义类常量
        z =100
    end
    
    methods                  % 定义类的方法
        function obj = classExample (a,b)   %构造函数,函数类名一致,完成类中变量的初始化
            obj.x = a;
            obj.y = b;
        end
        
        function display(obj)   % 自定义函数
            fprintf ('自定义类显示信息:\t ');
            fprintf('x+y = %d',obj.x + obj.y);
        end
    end
    
end

运行结果: 

对于常量不同调用方法

 第二种方法: 使用@文件夹形式

首先要新建一个目录,这里的例子类名是example2,所有文件夹的名字为@example2,当然也是放在Matlab的当前工作目录或者是搜索路基里面。

    在这个目录里,要有至少一个文件,即example2.m,这个文件包含了类定义和构造函数和类的名字要一样不过@文件夹方式下,其他的类函数是可以独立为一个普通的m文件的,就跟通常使用的函数文件一样,只是因为放在这个@文件夹下,就被Matlab认为是该类的类函数。这种方法适合有很多类函数的时候,便于管理。

  需要的注意的是,在使用example2这个类的时候,不能在@example2这个目录里,必须在目录外,因为Matlab把整个目录看作一个整体。另外,只要是分成两个或两个以上的文件来实现一个类的情况,就必须用@文件夹方法,而且所有文件必须都放到该文件夹内。

    所以该目录的结构是:

    查看更多精彩图片

    现在我们来说说7.6版本之前的@文件夹方法和之后的方法有什么不同。现在再用7.6之前的方式实现一下example1,取名example3。

    主要的不同就在于类定义文件,即example2.m和我们example3.m,虽然都是以类名来命名,但是实现方法大不相同。

    example2.m的类实现跟example1.m是一样的,只是把prod函数分离出去了。

    查看更多精彩图片

    但是example3.m就完全是一个函数,没有classdef关键字,关键点是class函数。

    查看更多精彩图片

    其他的display和prod函数内容都完全一样,只是独立为一个m文件。

    目录结构如下:

    查看更多精彩图片

包的概念。包的概念也就是命名空间的概念,把相关的类和函数通过一个包来组织起来,使之不予其他的同名类或者函数相混淆。

    在Matlab中,包的实现方法就是用“+包名”的形式来创建一个目录,也是要放到Matlab当前工作目录或者搜索路径中。使用包里面的类或者函数的时候,只要使用“包名.类名”或者“包名.函数名”即可。

    我们创建一个目录,取名+packageExample,然后将example1.m拷贝进去,然后在包目录外调用,结果如下:

    查看更多精彩图片
    
    目录结构如下:

    查看更多精彩图片

 

  • 27
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值