目录
创建简单类
设计类
类的基本目的是定义封装数据的对象以及对该数据执行的操作。例如,BasicClass定义一个属性和对该属性中的数据执行操作的两个方法:
-
Value - 此属性包含存储在类对象中的数值数据
-
roundOff - 此方法将属性值舍入到两位小数
-
multiplyBy - 此方法将属性值乘以指定数值
以下是 BasicClass 的定义:
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
要使用类,请执行以下操作:
-
将类定义保存在与该类同名的 .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
将对象作为第一个参数传递给接受多个参数的方法,此处以 myltiplyBy 方法的调用为例:
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 方法是向量化的,因此它可以对数组执行运算:
roundOff(obj)
ans =
2.8000 0.8700 7.0000
重载函数
类可以通过定义与现有MATLAB函数同名的方法来实现现有功能,例如加法。例如,假设要添加两个BasicClass对象。这通常意味着将每个对象的Value属性的值相加。
下面是 MATLAB plus 函数的重载版本。它将 BasicClass 类的加法定义为属性值相加:
method
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