文档

操作符重载

为什么重载操作符

通过实现适合于类的运算符,您可以将类的对象集成到MATLAB中®语言。例如,包含数值数据的对象可以定义算术操作,如+-这样你就可以在算术表达式中使用这些对象。通过实现关系操作符,您可以在条件语句中使用对象,比如开关而且如果语句。

如何定义操作符

您可以实现MATLAB运算符来处理类的对象。要实现操作符,请定义相关的类方法。

每个运算符都有一个相关的函数(例如,+运算符有一个相关的plus.m功能)。您可以通过创建具有适当名称的类方法来实现任何操作符。此方法可以执行与所实现的操作相适合的任何步骤。

有关运算符和相关函数名的列表,请参见<一个href="//www.tatmou.com/help/releases/R2019b/matlab/matlab_oop/implementing-operators-for-your-class.html" class="intrnllnk">MATLAB运算符和相关函数.

对象在操作中的优先级

用户定义类的优先级高于内置类。例如,假设是阶级的对象吗而且p是用户定义的类。的调用+方法,如果它存在:

Q + p p + Q

该方法是否可以添加类的对象用户定义的类取决于如何实现方法。

p而且是不同类的对象,MATLAB应用优先规则来决定使用哪一种方法。

方法调用中的对象优先级提供了MATLAB如何确定调用哪个方法的信息。

运算符优先级

重载运算符保留了原始的MATLAB运算符优先级。有关运算符优先级的信息,请参见<一个href="//www.tatmou.com/help/releases/R2019b/matlab/matlab_prog/operator-precedence.html" class="a">运算符优先级.

示例实现-可添加对象

加法器类通过定义类的对象来实现该类的对象的添加+方法。加法器对象的相加定义为对象的相加NumericData属性值。的+方法构造并返回加法器的对象NumericData属性值是添加的结果。

加法器类还实现了小于操作符(<),定义lt方法。的lt方法在比较每个对象中的值后返回逻辑值NumericData财产。

classdef加法器属性NumericData结束方法函数obj = Adder(val) obj。NumericData = val;结束函数R = + (obj1,obj2) a = double(obj1);B = double(obj2);r = Adder(a + b);结束函数d = obj. numericdata;结束函数Tf = lt(obj1,obj2)如果其中obj1。NumericData < obj2。NumericDatatf = true;其他的Tf = false;结束结束结束结束

使用双转换器可以将数值添加到加法器对象,并对类的对象执行添加操作。

a = Adder(1:10)
a =带有属性的加法:NumericData: [1 2 3 4 5 6 7 8 9 10]

添加两个对象:

A + A
ans =带有属性的加法:NumericData: [2 4 6 8 10 12 14 16 18 20]

添加一个对象,其任意值都可以转换为double:

B = uint8(255) + a
b =带有属性的加法:NumericData: [256 257 258 259 260 261 262 263 264 265]

比较的对象一个而且b使用<接线员:

A < b
Ans = 1

确保类提供实现类设计所需的任何错误检查。

MATLAB运算符和相关函数

下表列出了MATLAB运算符的函数名称。实现操作符来处理数组(标量展开、向量化算术操作等等),也可能需要修改索引和连接。使用该表中的链接查找关于每个函数的特定信息。

操作

定义的方法

描述

A + b

+(a, b)

二进制加法

A - b

-(a, b)

二进制减

——一个

uminus(一)

一元-

+一个

uplus(一)

一元加

b。*

(a, b)

Element-wise乘法

a * b

mtimes(a, b)

矩阵乘法

a / b

rdivide(a, b)

右元素明智除法

一个\ b。

ldivide(a, b)

左元素明智除法

a / b

mrdivide(a, b)

矩阵右除法

一个\ b

mldivide(a, b)

矩阵左除法

b。^

权力(a, b)

Element-wise权力

a ^

mpower(a, b)

矩阵幂

A < b

lt(a, b)

不到

A > b

gt(a, b)

大于

A <= b

(a, b)

小于或等于

A >= b

通用电气(a, b)

大于或等于

A ~= b

(a, b)

不等于

A == b

情商(a, b)

平等

A & b

而且(a, b)

逻辑和

A | b

(a, b)

逻辑或

~一个

(一)

逻辑不

d: b

a: b

结肠(a、d、b)

结肠(a, b)

冒号运算符

一个“

ctranspose(一)

复共轭转置

一个。”

转置(一)

矩阵的转置

[b]

horzcat(a, b,…)

横向连接

[一个;b]

vertcat(a, b,…)

垂直连接

(s1, s2,…sn)

subsref(年代)

下标引用

A (s1,…,sn) = b

subsasgn(年代,b)

下标赋值

b (a)

subsindex(一)

下标索引

相关的话题