概述
缘由:
今天偶然看了一个matlab的代码,然后发现自己都不清楚怎么运行,在运行主函数的时候会出现Undefined variable ***“”
不懂是怎么回事,就想尝试找源头一个一个的看关联函数,但是没有成功。
然后就看发现一个自己之前没见过的“classdef ”
(1) help classdef
classdef
classname
begins the class definition and anend
keyword terminates theclassdef
block. Only blank lines and comments can precedeclassdef
. 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, anend
keyword terminates theproperties
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拷贝进去,然后在包目录外调用,结果如下:
目录结构如下:
最后
以上就是淡然老虎为你收集整理的13,matlab中的 classdef定义类的使用的全部内容,希望文章能够帮你解决13,matlab中的 classdef定义类的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复