创建简单类
设计类
类的基本目的是定义封装数据的对象以及对该数据执行的操作。例如,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 5
MATLAB 将数字 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