Matlab中创建简单类

目录

创建简单类

设计类

创建对象

访问属性

调用方法

添加构造函数

方法向量化

重载函数

BasicClass 代码列表


创建简单类

设计类

        类的基本目的是定义封装数据的对象以及对该数据执行的操作。例如,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

你可能感兴趣的:(Matlab,matlab,开发语言)