操作符重载

为什么重载运算符

通过实施适合你的类的运营商,您可以将您的类的对象融入MATLAB®语言。例如,包含数字数据对象可以定义像算术运算+*-这样您就可以使用算术表达式这些对象。通过实现关系运算符,您可以使用条件语句,对象,如开关如果声明。

如何定义操作员

您可以实现MATLAB运营商的工作与你的类的对象。为了实现运营商,定义相关类的方法。

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

对于运营商和相关的功能名称的列表,请参阅<一个href="//www.tianjin-qmedu.com/help/matlab/matlab_oop/implementing-operators-for-your-class.html" class="intrnllnk">MATLAB运营商和相关功能。

在操作对象优先

用户定义的类比内置类具有更高的优先级。例如,假设q对象是类吗p是一个用户定义的类。这两个表达式生成的呼叫+在该方法中用户定义的类,如果它存在:

q + P P + Q

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

什么时候pq是不同类的对象,MATLAB应用优先规则来确定使用哪种方法。

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

运算符优先级

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

样品实施 - 可添加对象

加法器类实现另外通过定义这个类的对象+方法。加法器定义除对象的作为相加的numericData中属性值。该+方法构造并返回一个加法器对象,其numericData中属性值是增加的结果。

加法器类还实现了比运营商少(<)通过定义LT方法。该LT方法中的每个对象进行比较的值之后返回一个逻辑值numericData中属性。

classdef加法器属性numericData中结束方法功能obj =加法(val) obj。NumericData = val;结束功能r = + (obj1,obj2) a =双(obj1);b =双(methoda);加法器(a + b);结束功能d =双(OBJ)d = obj.NumericData;结束功能TF = LT(OBJ1,OBJ2)如果obj1.NumericData 其他TF = FALSE;结束结束结束结束

采用双转换器可让您数值增加加法器对象和执行另外的类的对象。

一个=加法器(1:10)
一个加法器=使用性能: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]

添加的对象与可转换为双任意值:

B = UINT8(255)+一
b =属性:NumericData: [256 257 258 259 260 261 262 263 264 265]

比较对象一个b使用<运营商:

A 
              
ANS = 1

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

MATLAB运营商和相关功能

下表列出了MATLAB操作符的函数名。要实现操作符来使用数组(标量扩展、向量化算术操作等),还可能需要修改索引和连接。使用此表中的链接可以找到每个函数的具体信息。

操作

方法来定义

描述

A + B

+(A,B)

二进制加法

一个 - B

减去(A,B)

二进制减

——一个

UMINUS(一个)

一元减

+一

UPLUS(一个)

一元加

一,* B

(A,B)

逐元素乘法

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)

元素方面的力量

a ^

MPOWER(A,B)

矩阵力量

A

LT(A,B)

少于

a >

GT(A,B)

比...更棒

一个<= B

(A,B)

小于或等于

a > =

通用电器(A,B)

大于或等于

~ = b

(A,B)

不等于

一个== b

EQ(A,B)

平等

a和b

(A,B)

逻辑与

A |b

(A,B)

逻辑或

~一个

(一个)

逻辑非

一个:d:乙

A:B

结肠(A,d,b)中

结肠(a, b)

冒号运算符

一个“

ctranspose(一个)

共轭复数

一个。”

转置(一个)

矩阵转置

[A B]

horzcat(A,B,...)

横向拼接

[一个;b]

vertcat(A,B,...)

垂直串联

(s1, s2,…sn)

的subsref(如)

标引用

一个(S1,...,SN)= B

subsasgn(A,S,B)

下标赋值

B(A)

subsindex(一个)

标指数

相关的话题