缘由:
今天偶然看了一个matlab的代码,然后发现自己都不清楚怎么运行,在运行主函数的时候会出现Undefined variable ***“”
不懂是怎么回事,就想尝试找源头一个一个的看关联函数,但是没有成功。
然后就看发现一个自己之前没见过的“classdef ”
(1) help classdef
classdefclassnamebegins the class definition and anendkeyword terminates theclassdefblock. 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 .
propertiesbegins a property definition block, anendkeyword terminates thepropertiesblock. 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拷贝进去,然后在包目录外调用,结果如下:

本文深入探讨Matlab中类的两种创建方法:单一m文件和@文件夹形式,讲解classdef关键字使用,以及类定义、属性、方法、构造函数等内容,同时介绍包的概念和使用。



647

被折叠的 条评论
为什么被折叠?



