创建简单类
设计类
类的基本目的是定义封装数据的对象以及对该数据执行的操作。例如,BasicClass 定义一个属性和对该属性中的数据执行操作的两个方法:
Value- 此属性包含存储在类对象中的数值数据roundOff- 此方法将属性值舍入到两位小数multiplyBy- 此方法将属性值乘以指定数值
用 classdef 模块开始类定义,然后在该模块中定义类属性和方法。以下是 ClassName...endBasicClass 的定义:
classdef BasicClass properties Value {mustBeNumeric} end methods function r = roundOff(obj) r = round([obj.Value],2); end function r = multiplyBy(obj,n) r = [obj.Value]*n; end end end
有关类语法的汇总,请参阅 classdef。
要使用类,请执行以下操作:
将类定义保存在与该类同名的
.m文件中。创建该类的一个对象。
访问属性以将数据赋给属性。
调用方法以对这些数据执行操作。
创建对象
使用类名创建类的一个对象:
a = BasicClass
a =
BasicClass with properties:
Value: []属性值最初为空。
访问属性
使用对象变量加点加属性名称的方式为 Value 属性赋值:
a.Value = pi/3;
要返回属性值,请使用不带赋值的圆点表示法:
a.Value
ans =
1.0472
有关类属性的信息,请参阅属性语法。
调用方法
对对象 a 调用 roundOff 方法:
roundOff(a)
ans =
1.0500将对象作为第一个参量传递给接受多个参量的方法,此处以 multiplyBy 方法的调用为例:
multiplyBy(a,3)
ans =
3.1416您也可以使用圆点表示法来调用方法:
a.multiplyBy(3)
使用圆点表示法时,没有必要将对象作为显式参量传递。该表示法使用圆点左侧的对象。
有关类方法的信息,请参阅方法语法。
添加构造函数
类可以定义一个特殊的方法来创建类对象,称为构造函数。您可以使用构造函数方法将参量传递给构造函数,用以对属性赋值。BasicClass 的 Value 属性使用 mustBeNumeric 函数限制其可能的值。
以下是 BasicClass 类的构造函数。如果在调用构造函数时带有输入参量,此参量会被赋给 Value 属性。如果在调用构造函数时不带输入参量,则 Value 属性采用其默认值,即空 ([])。
methods function obj = BasicClass(val) if nargin == 1 obj.Value = val; end end end
通过将此构造函数添加到类定义中,只需一个步骤即可创建对象并设置属性值:
a = BasicClass(pi/3)
a =
BasicClass with properties:
Value: 1.0472构造函数还可以执行与创建类对象相关的其他操作。
有关构造函数的信息,请参阅类构造函数方法。
方法向量化
MATLAB® 支持运算向量化。例如,您可以向向量添加数字:
[1 2 3] + 2
ans =
3 4 5MATLAB 将数字 2 添加到数组 [1 2 3] 中的每个元素。要向量化算术运算符方法,请将 obj.Value 属性引用括在方括号中。
[obj.Value] + 2
此语法使方法能够处理对象数组。例如,使用索引赋值创建一个对象数组。
obj(1) = BasicClass(2.7984); obj(2) = BasicClass(sin(pi/3)); obj(3) = BasicClass(7);
这两个表达式是等效的。
[obj.Value] + 2 [obj(1).Value obj(2).Value obj(3).Value] + 2
roundOff 方法是向量化的,因为属性引用用方括号括起来。
r = round([obj.Value],2);
roundOff 是向量化的,它可以对数组进行操作。roundOff(obj)
ans =
2.8000 0.8700 7.0000重载函数
类可以通过定义与现有 MATLAB 函数同名的方法来实现现有功能,例如加法。例如,假设您要添加两个 BasicClass 对象。这通常意味着将每个对象的 Value 属性的值相加。
下面是 MATLAB plus 函数的重载版本。它将 BasicClass 类的加法定义为属性值相加:
methods function r = plus(o1,o2) r = [o1.Value] + [o2.Value]; end end
通过实现名为 plus 的方法,您可以对 BasicClass 的对象使用“+”运算符。
a = BasicClass(pi/3); b = BasicClass(pi/4); a + b
ans =
1.8326通过向量化 plus 方法,您可以对对象数组执行运算。
a = BasicClass(pi/3); b = BasicClass(pi/4); c = BasicClass(pi/2); ar = [a b]; ar + c
ans =
2.6180 2.3562相关信息
有关重载函数的信息,请参阅在类定义中重载函数。
有关重载运算符的信息,请参阅运算符重载。
BasicClass 代码列表
以下是添加本主题中讨论的功能后的 BasicClass 定义:
classdef BasicClass properties Value {mustBeNumeric} end methods function obj = BasicClass(val) if nargin == 1 obj.Value = val; end end function r = roundOff(obj) r = round([obj.Value],2); end function r = multiplyBy(obj,n) r = [obj.Value] * n; end function r = plus(o1,o2) r = [o1.Value] + [o2.Value]; end end end