matlab点类型,Matlab中的类(Class)
转载自:http://ycool.com/post/gxkf6q8
1.
类的简介(class)
类是一种数据类型,与普通的数据类型不同的是类不仅包含数据,还包含对数据的操作,类把数据和数据操作方法封装在一起,作为一个整体参与程序的运行。类具有课继承性,创建一个新的类的时候,可以在一个基类中添加成员派生出新类。类的变量和类的实例是不同的,类的实例是动态分配的内存区域,通常称类的实例维“对象”,同一个类可以有不同的实例存在,他们个子有自己的数据,但是数据操作方法是相同的。类的变量可以看作是一个指针,指向类的实例。
在MATLAB中,为了更好地进行数据的封装,更加抽象地描述对象,也定义了类。图2.4.1给出了MATLAB中类的层次结构图,在建立类的结构的时候,可以根据这一层次结构进行设计和继承。
2. 建立一个类
通常一个类应该包含四个基本的成员函数:
构造函数 ――
与类名相同,可以在其中完成成员初始化的工作;
显示函数 ――
名为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.m
function d =
list(x,y)
d.x=x;
d.y=y;
d=class(d,'list');
% display.m
function
display(d)
fprintf('list
class:\n');
fprintf('x=%d\n',d.x);
fprintf('y=%d\n',d.y);
% get.m
function 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.m
function 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');
end
end
%prod.m
function z=prod(d)
z=d.x*d.y;
(3)
在MATLAB命令行中进行如下操作:
cd E:\MyProgram\matlab7\chap4
d = list(11,22)
list class:
x=11
y=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=12
y=22
d = set(d,'x',23,'y',34)
% 同时对两个成员变量赋值
list class:
x=23
y=34
(3)
成员变量的显示
成员被变量display不是必须的,不过她可以显示类的有用信息。如果在命令行上输入一个类变量,不加分号就回车,这时其display函数就自动调用。在该函数中,可以显示任何与该类信息相关的信息,当然也可以是不相关的。
(4)
工作目录
一个工作目录吓可以仿真多个类目录。通常可以把大程序按功能分开,用类重新组织起来,使程序更具有结构化,增强其可读性。
3.
在类中引用方法
(1) 实现方法函数
类的方法(class
methods)是指M文件编写的以类的对象作为输入产生的函数。一个特定的类的方法通常要保存在这个类的目录中。如上一小节中 @list
的方法函数存储在 @list路径下。
对方法汗的调用方式和对普通函数的调用方式是相同的,其命令格式为:
[输出1,输出2,…] =
方法名称(对象名,参数1,参数2,…);
但是必须注意,方法函数中如果对类的成员变量进行了改变,就必须将改变后的类变量作为输出变量返回,否则在原工作空间中的类变量的成员变量不能得到更新。例如:
d = list(10,20);
set(d,'x',23,'y',34);
d
list class:
x=10
y=20
可以看到,调用set函数而不将返回结果重新赋值给d,着d的x和y两个成员变量仍然保持原来的数值。
(2)私有方法
私有方法是指只能被同类的其他方法所调用的方法,其对应的M文件存在类目录的private子目录下。例如,如果list类有私有方法,就应该将它们保存在@list/private目录下。私有方法的作用域子限于list这个类中,而不能够被MATLAB命令行调用,或者被上一层类的方法调用。
(3)
辅助函数
在设计类的时候,有些工作需要由;一些特定的函数来完成,但这些函数并不一定直接对类的对象操作,这些函数通常被称为辅助函数(helper
funtions)。辅助函数可以是类方法文件中的一个子函数,也可以是一个独立的私有函数。
(4) 类方法的调用
在MATLAB中,可以采用与调试程序相同的命令对类方法进行调试,唯一不同的是对类方法的调试必须下命令行中添加类的路径。例如使用dbstop命令(停止调试)对display进行调试的时候,需要用如下的命令:
dbstop
@list/display
当然,也可以在M文件编辑/调试器中直接设置断点进行调试。
4.类的继承和集成
MATLAB中的类对象可以集成其他类对象的属性,当一个子类从父类中继承了属性后,在子类中将包括父类的所有成员和方法,父类的方法也可以使用之类继承的法拉国防。继承的概念是面向对象编程中的一个重要特性,子类可以很方便的引用父类中已经定义的方法。类的继承由两种方式:简单继承和多重继承。类集成的概率有点类似于嵌套,是指类对象的域中包括另外一个对象的情形。
(1) 简单继承
简单继承是指子类从一个父类继承属性,子类中也包括它自己的一些新的属性。对于父类的操作可以应用到子类上来,而对于子类中不属于父类的方法则不可以应用到父类上去。
通常可以使用class函数来实现类的继承。
子类对象名 =
class(子类对象名,'子类类名',父类对象名);
(2) 多重继承
多重继承是指子类从多于一个父类中继承属性。子类中包含所有从父类中继承来的属性,还包括它自己的属性。
(3)类的集成
类的集成是指一个类可以把另外的类作为自己的一个成员变量。被嵌入的类对象的方法函数值能通过外层对象的方法函数调用。
matlab点类型,Matlab中的类(Class)相关推荐
- decimal类型对象里面定义什么类型_MySQL中Decimal类型和Float Double的区别(详解)
MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...
- matlab中的类标转换程序
matlab中的类标转换程序 原始类标为Y,新类标为Y_new %进行排序,针对类标数目orig_labels = sort(unique(Y)); Y_new = Y;new_labels = 1: ...
- Matlab中的类定义 classdef
Matlab也可以写面向对象的代码,首先表现在可以定义类,以及可以继承,使用类(class)有很多好处,其中一个重要的好处便是解决变量名冲突和让函数.对象的结构清晰.class的static func ...
- matlab曲线拟合的应用,MATLAB软件在曲线拟合中的应用
2007 年第 3 期 福 建 电 脑 MATLAB软件在曲线拟合中的应用 冯元珍 1, 屠小明 2, 罗建平 2 (1. 南京人口管理干部学院基础部 江苏 南京 210042 2. 南京医科大学数学 ...
- matlab标题斜体_Matlab中下标,斜体,及希腊字母的使用方法
下面是Matlab官方列出来的Tex代码列表,包含了绝大部分的希腊字母和数学符号. Character Sequence Symbol Character Sequence Symbol Charac ...
- 自动控制原理matlab pdf下载,第五章-matlab在自动控制原理中的应用.pdf
第五章-matlab在自动控制原理中的应用.pdf 第第五五章章 MATLAB MATLAB MATLAB MATLAB在自动控制原理的应用在自动控制原理的应用 5 5 5 5 1 1 1 1 控制系 ...
- matlab下标可变,Matlab中下标,斜体,及希腊字母的使用方法
下面是Matlab官方列出来的Tex代码列表,包含了绝大部分的希腊字母和数学符号. Character Sequence Symbol Character Sequence Symbol Charac ...
- 用MATLAB绘制国债NSS模型,Matlab在数字信号处理中的运用.ppt
<Matlab在数字信号处理中的运用.ppt>由会员分享,可在线阅读,更多相关<Matlab在数字信号处理中的运用.ppt(68页珍藏版)>请在装配图网上搜索. 1.第七讲 M ...
- matlab函数im2bw_im2bw(matlab中im2bw用法)
MATLAB使用im2bw函数后,将一个32*16*3 unit的数组变成了31*10 的数组,. graythresh函数用法:使用最大类间方差法找到图片的一个合适的阈值(threshold).在使 ...
- matlab查看图像格式类型,matlab图像类型包括
matlab图像类型包括 更多相关问题 区域紧逼防守根据比赛的需要和本队条件,可以在半场.全场四分之三和全场防守中运用 P3口每位都能驱动 下列各项中,属于印花税免税范围的是(). 下列实习区寒武系各 ...
最新文章
- 搜狗分身技术再进化,让AI合成主播“动”起来
- UVA 11259 Coin Changing Again
- 腾讯CDC-审批流设计指南
- 【阿里云MPS】MPS(原MTS)概述
- 利用局域网测试仪进行网络性能测试
- NET问答: 重写了 Equals,还有必要重写 GetHashCode 吗?
- docker版本包 乌班图_Ubuntu安装Docker方式一:软件包安装
- c语言字符串提取第二个字符,c语言如何复制字符串(取前n个字符)strncpy()函数的应用实例...
- django 1.8 官方文档翻译: 3-4-1 基于类的视图
- Git仓库只拷贝代码-不拷贝提交记录-不拷贝其他分支
- ActiveMQ 认证
- 2021年烷基化工艺考试内容及烷基化工艺考试资料
- c语言更正错误,c语言出错invalid operands to binary %
- echarts实现立体柱状图
- 建立“图书_读者”数据库及如下 3 个表,并输入实验数据,用 SQL 语句实现如下五个查询(opengauss)
- 「Vue实战」武装你的前端项目
- MT25QU128 (flash) 简介
- 尚硅谷_在线教育_Nuxt整合错误
- 笔记-项目沟通管理-沟通方法和方式
- InterSystems IRIS、IRIS for Health和HealthShare Health Connect的2021.1版本的预览版现在已经发布!...
热门文章
- linux应用层读写event,Linux应用层获取鼠标坐标
- 数理逻辑蕴含_16-证明逻辑等价式和逻辑蕴涵式
- 最新麦子学院嵌入式开发系列培训教程
- httpwatch professional 破解版v9.4.17
- 微软阿根廷服务器解锁,XBOX阿根廷服购买教程
- Pysot训练自己数据集前的预处理
- 幕布图像大小与投影仪亮度关系对应表,--怎样选投影机和银幕不用愁了
- python ttk style,如何改变ttk.progressBar颜色在python
- linux idle是什么进程,Linux idle基础
- 系列之FIRST——跑酷小游戏:关卡+BOSS+技能版