Sobrecarga del operador
Por qué sobrecargar los operadores
Implementando operadores adecuados para su clase, puede integrar objetos de su clase en el lenguaje MATLAB®. Por ejemplo, los objetos que contienen datos numéricos pueden definir operaciones aritméticas como +
, *
, -
para que pueda utilizar estos objetos en expresiones aritméticas. Implementando operadores relacionales, puede utilizar objetos en instrucciones condicionales, como instrucciones switch
y if
.
Cómo definir operadores
Puede implementar operadores de MATLAB para trabajar con objetos de su clase. Para implementar operadores, defina los métodos de clase asociados.
Cada operador tiene una función asociada (por ejemplo, el operador + tiene una función plus.m
asociada). Puede implementar cualquier operador creando un método de clase con el nombre que corresponda. Este método puede seguir todos los pasos necesarios para la operación que se está implementando.
Para obtener una lista de los operadores y de los nombres de las funciones asociadas, consulte Operadores de MATLAB y funciones asociadas.
Precedencia de los objetos en las operaciones
Las clases definidas por el usuario tienen una mayor precedencia que las clases integradas. Por ejemplo, suponga que q
es un objeto de clase double
y p
es una clase definida por el usuario. Ambas expresiones generan una llamada al método plus
en la clase definida por el usuario, si existe:
q + p p + q
Si este método puede añadir objetos de clase double
y la clase definida por el usuario depende de cómo implemente el método.
Cuando p
y q
son objetos de distintas clases, MATLAB aplica las reglas de precedencia para determinar qué método utilizar.
Para obtener más información sobre cómo MATLAB determina el método al que debe llamar, consulte Method Invocation.
Precedencia de operadores
Los operadores sobrecargados conservan la precedencia original de MATLAB para el operador. Para obtener más información sobre la precedencia de los operadores, consulte Precedencia de operadores.
Implementación de muestra: objetos que se pueden sumar
La clase Adder
implementa la suma para objetos de esta clase definiendo un método plus
. Adder
define la suma de objetos como la suma de los valores de la propiedad NumericData
. El método plus
construye y devuelve un objeto Adder
cuyo valor de la propiedad NumericData
es el resultado de la suma.
La clase Adder
también implementa el operador menor que (<
) definiendo un método lt
. El método lt
devuelve un valor lógico después de comparar los valores en cada propiedad NumericData
del objeto.
classdef Adder properties NumericData end methods function obj = Adder(val) obj.NumericData = val; end function r = plus(obj1,obj2) a = double(obj1); b = double(obj2); r = Adder(a + b); end function d = double(obj) d = obj.NumericData; end function tf = lt(obj1,obj2) if obj1.NumericData < obj2.NumericData tf = true; else tf = false; end end end end
Utilizar un convertidor doble permite añadir valores numéricos a los objetos Adder
y realizar sumas en objetos de la clase.
a = Adder(1:10)
a = Adder with properties: NumericData: [1 2 3 4 5 6 7 8 9 10]
Sume dos objetos:
a + a
ans = Adder with properties: NumericData: [2 4 6 8 10 12 14 16 18 20]
Sume un objeto con cualquier valor que se pueda convertir a doble:
b = uint8(255) + a
b = Adder with properties: NumericData: [256 257 258 259 260 261 262 263 264 265]
Compare los objetos a
y b
utilizando el operador <
:
a < b
ans = 1
Asegúrese de que su clase proporciona las comprobaciones de errores necesarias para implementar su diseño de clase.
Operadores de MATLAB y funciones asociadas
En la siguiente tabla se enumeran los nombres de las funciones para los operadores de MATLAB. Puede que la implementación de operadores para que funcionen con arreglos (expansión escalar, operaciones aritméticas vectorizadas, etc.) también requiera la modificación de la indexación y la concatenación. Utilice los enlaces de esta tabla para encontrar información específica sobre cada función.
Operación | Método que se desea definir | Descripción |
---|---|---|
|
| Suma binaria |
|
| Resta binaria |
|
| Menos unario |
|
| Más unario |
|
| Multiplicación elemento por elemento |
|
| Multiplicación de matrices |
|
| División derecha elemento por elemento |
|
| División izquierda elemento por elemento |
|
| División derecha de matrices |
|
| División izquierda de matrices |
|
| Potencia elemento por elemento |
|
| Potencia de matrices |
|
| Menor que |
|
| Mayor que |
| le (a,b) | Menor que o igual a |
| ge (a,b) | Mayor que o igual a |
| ne (a,b) | No es igual a |
| eq (a,b) | Igualdad |
| and (a,b) | AND lógico |
| or (a,b) | OR lógico |
| not (a) | NOT lógico |
|
| Operador de dos puntos |
|
| Traspuesta conjugada compleja |
|
| Trasposición de matriz |
|
| Concatenación horizontal |
|
| Concatenación vertical |
|
| Referencia con subíndices |
|
| Asignación con subíndices |
|
| Indexación de subíndices |