Diferencia entre revisiones de «Sobrecarga de operadores binarios (Programación)»

(Página creada con '<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...')
 
Línea 2: Línea 2:
  
 
'''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
+
1- Declarando una función miembro no estática que acepte un argumento
# Declarando una función no miembro (generalmente friend) que acepte dos argumentos.
+
2- 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)
+
1- x.operator@(y)
# operator@(x, y)
+
2- 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 ( + )==
 
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.  
 
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>
 
  #include <iostream>
Línea 21: Línea 21:
 
   }
 
   }
 
  };
 
  };
 
 
  int main () {    // =========
 
  int main () {    // =========
 
   float x = 5, y = 6;
 
   float x = 5, y = 6;
Línea 38: Línea 37:
 
*[[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:14 17 nov 2012

Sobrecarga de operadores binarios (Programación)
Información sobre la plantilla
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: 1- Declarando una función miembro no estática que acepte un argumento 2- 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: 1- x.operator@(y) 2- 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

Puede Consultar

Fuente