Main Content

创建简单类

设计类

类的基本目的是定义封装数据的对象以及对该数据执行的操作。例如,BasicClass 定义一个属性和对该属性中的数据执行操作的两个方法:

  • Value - 此属性包含存储在类对象中的数值数据

  • roundOff - 此方法将属性值舍入到两位小数

  • multiplyBy - 此方法将属性值乘以指定数值

classdef ClassName...end 模块开始类定义,然后在该模块中定义类属性和方法。以下是 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

有关类语法的汇总,请参阅 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)

使用圆点表示法时,没有必要将对象作为显式参量传递。该表示法使用圆点左侧的对象。

有关类方法的信息,请参阅方法语法

添加构造函数

类可以定义一个特殊的方法来创建类对象,称为构造函数。您可以使用构造函数方法将参量传递给构造函数,用以对属性赋值。BasicClassValue 属性使用 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

相关主题