Diferencia entre revisiones de «Sobrecarga de operadores binarios (Programación)»
| Línea 1: | Línea 1: | ||
<div align="justify">{{Definición|Nombre= Sobrecarga de operadores binarios |imagen= |concepto=Se llama sobrecarga de operadores cuando reutilizando el mismo operador con un número de usos diferentes, y el compilador decide como usar ese operador dependiendo sobre qué opera.}} | <div align="justify">{{Definición|Nombre= Sobrecarga de operadores binarios |imagen= |concepto=Se llama sobrecarga de operadores cuando reutilizando el mismo operador con un número de usos diferentes, y el compilador decide como usar ese operador dependiendo sobre qué opera.}} | ||
| − | |||
'''Sobrecarga de operadores binarios (Programación)'''. Pueden ser sobrecargados de dos formas: | '''Sobrecarga de operadores binarios (Programación)'''. Pueden ser sobrecargados de dos formas: | ||
| − | |||
# Declarando una función miembro no estática que acepte un argumento | # Declarando una función miembro no estática que acepte un argumento | ||
# Declarando una función no miembro (generalmente friend) que acepte dos argumentos. | # Declarando una función no miembro (generalmente friend) que acepte dos argumentos. | ||
| − | |||
Dependiendo de la declaración, si @ representa el operador binario, la expresión x @ y entre miembros de una clase C puede ser interpretada como cualquiera de las dos formas: | Dependiendo de la declaración, si @ representa el operador binario, la expresión x @ y entre miembros de una clase C puede ser interpretada como cualquiera de las dos formas: | ||
| − | |||
# x.operator@(y) | # x.operator@(y) | ||
# operator@(x, y) | # operator@(x, y) | ||
| − | |||
Si han sido declaradas ambas formas, se aplica la congruencia estándar de argumentos para resolver cualquier posible ambigüedad. | Si han sido declaradas ambas formas, se aplica la congruencia estándar de argumentos para resolver cualquier posible ambigüedad. | ||
== Sobrecarga del operador suma ( + )== | == Sobrecarga del operador suma ( + )== | ||
| Línea 38: | Línea 33: | ||
Rx = 4 | Rx = 4 | ||
Ry = 6 | Ry = 6 | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
</div> | </div> | ||
== Puede Consultar == | == Puede Consultar == | ||
*[[Operadores|Operadores]] | *[[Operadores|Operadores]] | ||
*[[Sobrecarga de operadores| Sobrecarga de operadores]] | *[[Sobrecarga de operadores| Sobrecarga de operadores]] | ||
| − | *[[Sobrecarga de operadores unarios| Sobrecarga de operadores unarios]] | + | *[[Sobrecarga de operadores unarios (Programación)| Sobrecarga de operadores unarios (Programación)]] |
== Fuente == | == Fuente == | ||
* [http://www.zator.com/Cpp/E4_9_18b.htm Sobrecarga de operadores binarios] | * [http://www.zator.com/Cpp/E4_9_18b.htm Sobrecarga de operadores binarios] | ||
Revisión del 13:20 17 nov 2012
| ||||
Sobrecarga de operadores binarios (Programación). Pueden ser sobrecargados de dos formas:
- Declarando una función miembro no estática que acepte un argumento
- Declarando una función no miembro (generalmente friend) que acepte dos argumentos.
Dependiendo de la declaración, si @ representa el operador binario, la expresión x @ y entre miembros de una clase C puede ser interpretada como cualquiera de las dos formas:
- x.operator@(y)
- operator@(x, y)
Si han sido declaradas ambas formas, se aplica la congruencia estándar de argumentos para resolver cualquier posible ambigüedad.
Sobrecarga del operador suma ( + )
En el ejemplo que sigue se utiliza la clase Vector, y sobrecargamos el operador suma binaria (+), de forma que pueda ser utilizada con tipos de dicha clase.
#include <iostream>
using namespace std;
class Vector {
public:
float x, y;
Vector operator+ (Vector v) { // función-operador operator+
x = x + v.x;
y = y + v.y;
return *this;
}
};
int main () { // =========
float x = 5, y = 6;
cout << "R = " << x + y << endl; // M.2: versión global
Vector v1 = {1, 2}, v2 = {3, 4};
Vector v3 = v1 + v2; // M.4: versión sobrecargada
cout << "Rx = " << v3.x << endl;
cout << "Ry = " << v3.y << endl;
}
Salida:
R = 11
Rx = 4
Ry = 6