13,matlab中的 classdef定义类的使用 您所在的位置:网站首页 matlab定义的函数放在哪 13,matlab中的 classdef定义类的使用

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

2024-07-02 01:13| 来源: 网络整理| 查看: 265

缘由:

今天偶然看了一个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拷贝进去,然后在包目录外调用,结果如下:

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

    查看更多精彩图片

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有