主要内容

操作符重载

为什么要重载操作符

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

如何定义操作符

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

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

有关操作符和相关函数名的列表,请参见<一个href="//www.tianjin-qmedu.com/help/techdoc/matlab_oop/implementing-operators-for-your-class.html" class="intrnllnk">MATLAB算子及相关函数.

操作中的对象优先级

用户定义类的优先级高于内置类。例如,假设是类的对象吗而且p用户定义的类。这两个表达式都生成对+方法,如果它存在:

Q + p p + Q

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

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

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

运算符优先级

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

示例实现-可添加对象

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

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

classdef加法器属性NumericData结束方法函数obj =加法器(val)NumericData = val;结束函数R = + (obj1,obj2) a = double(obj1);B = double(obj2);r = Adder(a + b);结束函数d = double(obj) 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(一)

下标索引

相关的话题