From:  http://ycool.com/post/gxkf6q8  &&http://blog.sina.com.cn/s/blog_9444ed240102vw3d.html

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()函数类定义技巧相关推荐

  1. Python使用property函数定义属性访问方法如果不定义fget会怎么样?

    我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...

  2. matlab 查看函数属性,matlab – 使用FFT属性查找2D函数的导数

    免责声明 – 2015年9月16日编辑 由于我对频域中微分运算的理解存在一个小但基本的缺陷,这篇文章发生了重大变化.自上次迭代以来,很多帖子都发生了变化. 我要感谢Luis Mendo帮助我调试为什么 ...

  3. matlab里查看图像属性,MATLAB绘图属性操作

    前言 MATLAB的绘图功能十分强大,可以绘制各种各样的图形,数据可视化十分强大,但有时,采用默认的绘图属性,图形的形式符合我们的要求,学会使用图形句柄,并利用句柄修改属性是十分重要的. 1.句柄之间 ...

  4. 基于MATLAB的面向对象编程(1)——类,属性,方法

    这里写目录标题 1 入门 1.1 如何把面条抽象成Class 1.2 文件类 2 基于MATLAB的面向对象编程入门 2.1 如何定义一个类(Class) 2.2 创建一个对象 2.3 类的属性 2. ...

  5. C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)

    1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...

  6. python函数和类定义

    一.函数定义 1.自定义函数def def fun_name(parameters):expressionsreturn value 参数说明: fun_name:函数名 parameters:参数 ...

  7. java jni 方法描述,五、JNI提供的函数介绍(一):类和对象操作

    如果你要开始JNI编程,你还需要了解JNI提供了哪些函数供你调用. 这些函数都定义在了jni.h文件,包括上一篇文章介绍的数据类型,也都在这个头文件中. 类和对象操作 假设你要在JNI层使用C代码创建 ...

  8. mysql navicat 函数_Navicat for MySQL 函数高级属性讲解

    原标题:Navicat for MySQL 函数高级属性讲解 过程和函数是一组可以保存在服务器上的 SQL 语句.MySQL()函数高级属性主要涉及安全性.定义者.数据访问.决定性等方面的内容. Na ...

  9. Matalab类定义

    Matlab类定义 Matlab自学笔记(2) 文章目录 Matlab类定义 前言 1.类定义 2.classdef定义块 3.属性定义块 3.1 属性特性 Attributes 4.方法 5.事件 ...

  10. 【C++ 语言】面向对象 ( 类定义 | 限制头文件引用次数 | 构造方法 | 析构方法 )

    文章目录 类的定义 ( 头文件引用次数控制 ) 类的实现 ( 构造函数 | 析构函数 ) CMake 编译配置 类测试 ( 构造析构调用测试 ) 类的定义 ( 头文件引用次数控制 ) 类定义 , 类一 ...

最新文章

  1. 离线人脸属性分析_最新开源 | 人脸识别应用套件:毫秒级离线识别 适用多类场景...
  2. redis 内存不足 排查_redis莫名数据被清问题排查记录
  3. python3 import 和__import__() 的区别
  4. Centos安装postgreSQL
  5. 引号快捷键_就业有“位”来 能让你早下班的常用快捷键
  6. boost::hawick_circuits用法的测试程序
  7. Redis操作List相关API
  8. guava 并发同步_Google Guava –与Monitor同步
  9. flash动画设计期末作业_「2019年下学期」第二十五二十六节:期末作品三-吉祥物设计...
  10. CSS设置元素水平居中、垂直居中方式汇总
  11. vue computed使用_前端发展方向指南—Vue运行机制
  12. C++迭代器(STL迭代器)
  13. UI设计和平面设计有什么区别哪个前景更好
  14. VggNet网络结构详解
  15. 工程学导论——心得体会
  16. TF卡文件系统变RAW怎样解决
  17. 基于照片标记的广州市旅游流特征简单分析(上)
  18. windows 安装达梦数据库Python 报错:fatal error C1083: Cannot open include file: ‘DPI.h‘: No such file or direc
  19. python 图片打水印 透明图片合并
  20. 全息投影在博物馆中有哪些作用

热门文章

  1. Cortex-A7中断系统
  2. 【题解】【中国大学MOOC】(北京大学)人工智能与信息社会测验——1新闻热点与身边的人工智能
  3. JasperReport生成pdf文件 Java开发pdf文件 pdf文件生成及下载
  4. 云原生架构下的 API 网关实践:Kong (三)
  5. 【2019/02/18测试T3】飘雪圣域
  6. 计算机毕业设计【HTML+CSS+JavaScript服装购物商城】毕业论文源码
  7. Flash制作大雪纷飞效果动画
  8. 七夕节送女朋友什么礼物最好、七夕最走心的礼物清单
  9. imo云办公室与RTX竞品分析报告
  10. 给女朋友道歉的java代码_我用开源工具给女朋友写道歉信!